You have folders of Excel workbooks that need to live inside Microsoft Access — for SQL queries, joins across tables, indexing, or feeding a reporting database. Opening each XLSX in Access and walking through the import wizard does not scale past two or three files. Total Excel Converter X converts XLS and XLSX files to DBF (the dBase IV format that Access imports natively) from the command line, in batch, with no GUI and no Microsoft Office installation required. Install it on a Windows server, call it from a script or via ActiveX, and let it run unattended.
*.xlsx) and the converter processes every matching file in one run
(30 days, no email)
(server license, perpetual)
Windows 7/8/10/11 • Server 2008/2012/2016/2019/2022
Excel is a spreadsheet. Each worksheet is a flat grid — rows and columns, with formulas and formatting layered on top. Excel handles up to 1,048,576 rows per sheet, but it has no native joins, no indexed lookups across files, and no shared transaction model. Two analysts editing the same XLSX produce two diverging copies. Reporting on data that lives across thirty workbooks means writing VLOOKUP chains that break the moment a column shifts.
Access (and any database that consumes DBF, including FoxPro, OpenOffice Base, and most BI tools) is built for relational data. Tables have typed fields, primary keys, and indexes. Queries use SQL: joins, aggregations, filters, subqueries. One Access database can hold tens of millions of rows across multiple linked tables and serve them through forms and reports. When Excel data needs to drive that kind of analysis, it has to land in a database table first — and DBF is the format Access imports without conversion friction.
| Excel | Access / DBF | |
|---|---|---|
| Structure | Flat grid per sheet | Typed fields, indexes, relations |
| Querying | Formulas, VLOOKUP | SQL with joins and aggregations |
| Scale | 1M rows per sheet, slow past 100K | Tens of millions of rows per table |
| Concurrency | One editor at a time | Multi-user with row locking |
| Workflow | Ad-hoc analysis | Reporting, ETL, BI pipelines |
Download the installer from the link above and run it on your Windows server or workstation. The setup takes under a minute. No Microsoft Office installation is required — the converter parses XLS and XLSX directly using its own engine, including formulas, dates, numeric precision, and Unicode strings.
Open cmd.exe or PowerShell. The converter executable is XLSConverter.exe, located in the installation folder (typically C:\Program Files\CoolUtils\TotalExcelConverterX\). Add it to your system PATH or use the full path in your commands.
The simplest command converts all Excel files in a folder to DBF:
XLSConverter.exe C:\Books\*.xlsx C:\Output\ -c DBF
This processes every .xlsx file in C:\Books\ and saves the resulting DBF tables in C:\Output\. Each workbook produces one DBF with the same base name, ready to drag into Access via External Data → dBase File.
Control how columns become DBF fields with additional flags:
XLSConverter.exe C:\Books\*.xlsx C:\Output\ -c DBF -Sheet Sheet1 -FirstRowHeader 1 -log C:\Logs\xls2dbf.log
-Sheet Sheet1 — pick a specific worksheet by name (or use an index)-FirstRowHeader 1 — treat row 1 as field names; the converter sanitizes them to valid DBF identifiers-Range A1:G500 — restrict the conversion to a specific cell range-log C:\Logs\xls2dbf.log — write a conversion log listing each input file, output file, row count, and any field-truncation warningsSave your command in a .bat file and schedule it with Windows Task Scheduler:
@echo off "C:\Program Files\CoolUtils\TotalExcelConverterX\XLSConverter.exe" C:\Incoming\*.xlsx C:\Archive\DBF\ -c DBF -FirstRowHeader 1 -log C:\Logs\xls2dbf.log
Run it every night, or after a finance team drops their daily workbook into the incoming folder. The DBF files are then linked into Access through ODBC or imported as native tables, and the rest of the reporting pipeline runs against a real database instead of a tangle of spreadsheets.
Total Excel Converter X includes a full ActiveX interface. You can call the converter from any COM-compatible environment — .NET, VBScript, PHP, Python, Ruby, or ASP. This lets you embed Excel-to-DBF conversion into your own ETL service, intranet portal, or data-ingest application without shelling out to a command-line process.
Example (C#/.NET):
XLSConverterX Cnv = new XLSConverterX();
Cnv.Convert("C:\\Books\\sales.xlsx", "C:\\Output\\sales.dbf", "-c DBF -FirstRowHeader 1 -log c:\\Logs\\xls.log");
Example (PHP):
$c = new COM("XLSConverter.XLSConverterX");
$c->convert("C:\\Books\\sales.xlsx", "C:\\Output\\sales.dbf", "-c DBF -FirstRowHeader 1 -log c:\\Logs\\xls.log");
The same call works from ASP.NET, VBScript, Python, Ruby, Perl, and JavaScript (Windows Script Host). Your application can accept uploaded XLSX files from a web form, convert them to DBF, and link the result into Access or load it straight into a SQL Server staging table.
| Feature | Online Converters | Total Excel Converter X |
|---|---|---|
| Batch processing | One file at a time | Unlimited files per batch |
| File privacy | Workbooks uploaded to third-party server | Files never leave your machine |
| Field type detection | Everything becomes Character | Numeric, Date, Logical, Character inferred |
| Sheet selection | First sheet only | Any sheet by name or index |
| Row limit | Often capped at 10K-50K rows | No artificial cap |
| Automation | Manual only | Command line, .bat, Task Scheduler, ActiveX |
| Server deployment | Not possible | Designed for servers, no GUI needed |
| Requires Excel installed | N/A | No |
The converter reads XLS and XLSX directly and writes DBF tables without Microsoft Excel, LibreOffice, or any spreadsheet application installed. This avoids per-server Office licensing and the well-known instability of automating Excel in unattended scenarios.
Numbers stay numeric, dates stay Date fields, true/false flags become Logical, text becomes Character with appropriate width. Access imports the result as a properly typed table that you can index, join, and query immediately — no post-import conversion step.
Total Excel Converter X is designed for unattended use. No GUI windows, no dialog boxes, no confirmation prompts. It runs silently from the command line or as part of a service — exactly what an ETL host or data-ingest server needs.
The same command-line tool converts Excel to CSV, JSON, XML, SQL, PDF, HTML, ODS, and more. One installation covers your full Excel-to-database and Excel-to-document pipeline. Change -c DBF to -c SQL and you get a script of INSERT statements ready to load into MySQL, PostgreSQL, or SQL Server with the same batch and automation features.
(30 days, no email or credit card)
(server license, perpetual)
Windows 7/8/10/11 • Server 2008/2012/2016/2019/2022
"Our clinics submit weekly utilization data in XLSX. Loading those into Access through the import wizard ate two hours every Monday. We now run XLSConverter.exe from a scheduled .bat over the SMB share, and the linked DBF tables refresh automatically. Field types come through correctly, including the date columns that the Access wizard used to mangle. Two hours back per week, and zero manual touches."
Linnea Ostberg Database Administrator, Regional Health Network
"We needed to migrate fifteen years of dispatch spreadsheets into a single Access database for trend analysis. Total Excel Converter X handled the whole archive in one batch — about 4,200 workbooks — over a long weekend. The log file flagged the handful of files with bad header rows, and the rest landed in Access with proper Numeric and Date fields. Beats the alternative of manual import or a one-off Python script that nobody else can maintain."
Daniel Petrescu Reporting Analyst, Logistics Co.
"We embed XLSConverter via the COM interface in our ingest service. Customers upload Excel rate cards through the portal; the service converts them to DBF and links the result into our staging Access database for validation before promoting to SQL Server. The ActiveX call is fast and predictable. Sheet selection and FirstRowHeader cover almost every customer template; a couple of edge cases needed pre-processing on our side, but support was responsive when we asked."
Aiyana Holloway ETL Developer, Insurance SaaS
XLSConverter.exe C:\Books\*.xlsx C:\Output\ -c DBF. This converts every Excel workbook in the source folder to a DBF table, which Access imports natively through External Data → dBase File. Add -FirstRowHeader 1 to use row 1 as field names and -Sheet to pick a specific worksheet.-FirstRowHeader 1 the first row supplies field names, sanitized to valid DBF identifiers (max 10 chars, no spaces).-Sheet SheetName to convert a specific sheet, or run the converter once per sheet to produce one DBF per worksheet. Each DBF can then be imported as a separate table in Access, letting you join across sheets that previously lived in a single workbook.
Download free trial and convert your files in minutes.
No credit card or email required.
string src="C:\\test\\Source.xlsx";
string dest="C:\\test\\Dest.PDF";
ExcelConverterX Cnv = new ExcelConverterX();
Cnv.Convert(src, dest, "-c PDF -log c:\\test\\Excel.log");
MessageBox.Show("Convert complete!");
public static class Function1
{
[FunctionName("Function1")]
public static async Task Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
StringBuilder sbLogs = new StringBuilder();
sbLogs.AppendLine("started...");
try
{
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = true;
startInfo.UseShellExecute = false;
var assemblyDirectoryPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
assemblyDirectoryPath = assemblyDirectoryPath.Substring(0, assemblyDirectoryPath.Length - 4);
var executablePath = $@"{assemblyDirectoryPath}\Converter\ExcelConverterX.exe";
sbLogs.AppendLine(executablePath + "...");
var msgPath = $@"{assemblyDirectoryPath}\MSG\MSG-1.xlsx";
var outPath = Path.GetTempFileName() + ".pdf";
startInfo.FileName = executablePath;
if (File.Exists(outPath))
{
File.Delete(outPath);
}
if (File.Exists(executablePath) && File.Exists(msgPath))
{
sbLogs.AppendLine("files exists...");
}
else
sbLogs.AppendLine("EXE & MSG files NOT exists...");
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = $"{msgPath} {outPath}";
using (Process exeProcess = Process.Start(startInfo))
{
sbLogs.AppendLine($"wait...{DateTime.Now.ToString()}");
exeProcess.WaitForExit();
sbLogs.AppendLine($"complete...{DateTime.Now.ToString()}");
}
int sleepCounter = 10;
while(!File.Exists(outPath) && sleepCounter > 0)
{
System.Threading.Thread.Sleep(1000);
sbLogs.AppendLine("sleep...");
sleepCounter--;
}
if (File.Exists(outPath))
sbLogs.AppendLine("Conversion complete successfully.");
}
catch (Exception ex)
{
sbLogs.AppendLine(ex.ToString());
}
return new OkObjectResult(sbLogs);
}
}
dim C
Set C=CreateObject("ExcelConverter.ExcelConverterX")
C.Convert "c:\test\source.xlsx", "c:\test\dest.pdf", "-cPDF -log c:\test\Excel.log"
Response.Write C.ErrorMessage
set C = nothing
dim C
Set C=CreateObject("ExcelConverter.ExcelConverterX")
Response.Clear
Response.AddHeader "Content-Type", "binary/octet-stream"
Rresponse.AddHeader "Content-Disposition", "attachment; filename=test.pdf"
Response.BinaryWrite c.ConvertToStream("C:\www\ASP\Source.xlsx", "C:\www\ASP", "-cpdf -log c:\html.log")
set C = nothing
$src="C:\\test\\test.XLS";
$dest="C:\\test\\test.CSV";
if (file_exists($dest)) unlink($dest);
$c= new COM("ExcelConverter.ExcelConverterX");
$c->convert($src,$dest, "-c csv -log c:\\test\\xls.log");
if (file_exists($dest)) echo "OK"; else echo "fail:".$c->ErrorMessage;
require 'win32ole'
c = WIN32OLE.new('ExcelConverter.ExcelConverterX')
src="C:\\test\\test.xlsx";
dest="C:\\test\\test.pdf";
c.convert(src,dest, "-c PDF -log c:\\test\\Excel.log");
if not File.exist?(dest)
puts c.ErrorMessage
end
import win32com.client
import os.path
c = win32com.client.Dispatch("ExcelConverter.ExcelConverterX")
src="C:\\test\\test.xlsx";
dest="C:\\test\\test.pdf";
c.convert(src, dest, "-c PDF -log c:\\test\\Excel.log");
if not os.path.exists(file_path):
print(c.ErrorMessage)
uses Dialogs, Vcl.OleAuto;
var
c: OleVariant;
begin
c:=CreateOleObject('ExcelConverter.ExcelConverterX');
C.Convert('c:\test\source.xlsx', 'c:\test\dest.pdf', '-cPDF -log c:\test\Excel.log');
IF c.ErrorMessage<>'' Then
ShowMessage(c.ErrorMessage);
end;
var c = new ActiveXObject("ExcelConverter.ExcelConverterX");
c.Convert("C:\\test\\source.xlsx", "C:\\test\\dest.pdf", "-c PDF");
if (c.ErrorMessage!="")
alert(c.ErrorMessage)
use Win32::OLE; my $src="C:\\test\\test.XLS"; my $dest="C:\\test\\test.CSV"; my $c = CreateObject Win32::OLE 'ExcelConverter.ExcelConverterX'; $c->convert($src,$dest, "-c csv -log c:\\test\\xls.log"); print $c->ErrorMessage if -e $dest;