You have folders of Excel workbooks that need to feed a SOAP web service, an EDI partner, a regulatory submission, or an ERP integration — and the receiving system speaks XML, not XLSX. Opening each file in Excel and saving it as XML by hand stops working past the second workbook, and Excel's built-in XML export ignores schema requirements that the downstream system actually checks. Total Excel Converter X converts XLS and XLSX files to well-formed XML from the command line, in batch, with no GUI and no Microsoft Excel 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 workbook in one run
(30 days, no email)
(server license, perpetual)
Windows 7/8/10/11 • Server 2008/2012/2016/2019/2022
Excel is a grid. Rows and columns hold values, and the meaning of each column lives in a header row that humans read. The format is great for analysts, terrible for system integration. SOAP services, EDI gateways, regulatory portals, banking interfaces, and HL7 healthcare messages do not parse XLSX. They expect XML with explicit element names, defined nesting, and predictable escaping rules.
XML is hierarchical and self-describing. Each value carries an element name, the document validates against a schema, and any platform — Linux, Java, .NET, IBM mainframes — can parse it without proprietary libraries. When Excel data has to enter that world, it has to become XML first. Total Excel Converter X writes valid XML where every Excel row turns into a record node, the header row supplies field names, and special characters are escaped so the output passes through any XML parser cleanly.
| Excel (XLS/XLSX) | XML | |
|---|---|---|
| Shape | Two-dimensional grid | Hierarchical tree |
| Field names | Implicit (header row) | Explicit on every record |
| Validation | None at file level | Schema (XSD, DTD) |
| Consumers | Humans, Excel-aware tools | SOAP, EDI, ERP, HL7, regulators |
| Cross-platform | Best on Windows + Office | Universal — every language and OS |
Download the installer from the link above and run it on your Windows server or workstation. The setup takes under a minute. No Microsoft Excel installation is required — the converter reads XLS and XLSX directly with its own parser, including formulas, styles, and multi-sheet workbooks.
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 XML:
XLSConverter.exe C:\Sheets\*.xlsx C:\Output\ -c XML
This processes every .xlsx file in C:\Sheets\ and saves the resulting XML files in C:\Output\. Each workbook produces one XML file with the same base name. Each row in the source becomes a <Row> element, and each cell becomes a child element named after the corresponding column header.
Control the XML output with additional flags:
XLSConverter.exe C:\Sheets\*.xlsx C:\Output\ -c XML -Encoding UTF-8 -FirstRowAsHeader true -log C:\Logs\xls2xml.log
-Encoding UTF-8 — set the XML encoding (UTF-8, UTF-16, Windows-1252, ISO-8859-1)-FirstRowAsHeader true — use row 1 as element names instead of generic Column1, Column2-Sheet "Invoices" — convert only the named worksheet instead of every sheet-log C:\Logs\xls2xml.log — write a conversion log for verificationSave 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\XML\ -c XML -Encoding UTF-8 -FirstRowAsHeader true -log C:\Logs\xls2xml.log
This runs the conversion every night (or at whatever interval you set) and writes a log file so you can verify the results. Drop new workbooks into C:\Incoming\ during the day, and the integration pipeline picks them up automatically.
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-XML conversion into your own web application, integration broker, or document workflow without shelling out to a command-line process.
Example (C#/.NET):
XLSConverterX Cnv = new XLSConverterX();
Cnv.Convert("C:\\Sheets\\invoices.xlsx", "C:\\Output\\invoices.xml", "-c XML -Encoding UTF-8 -FirstRowAsHeader true -log c:\\Logs\\xls.log");
Example (PHP):
$c = new COM("XLSConverter.XLSConverterX");
$c->convert("C:\\Sheets\\invoices.xlsx", "C:\\Output\\invoices.xml", "-c XML -Encoding UTF-8 -FirstRowAsHeader true -log c:\\Logs\\xls.log");
The same call works from ASP.NET, VBScript, Python, Ruby, Perl, and JavaScript (Windows Script Host). Your integration layer can accept uploaded Excel files, convert them to XML in memory, and forward the XML payload directly to a SOAP endpoint or an ERP queue.
| Feature | Online Converters | Total Excel Converter X |
|---|---|---|
| Batch processing | One file at a time | Unlimited files per batch |
| Data privacy | Workbooks uploaded to third-party server | Files never leave your machine |
| Encoding control | UTF-8 only, often broken | UTF-8, UTF-16, Windows-1252, ISO-8859-1 |
| Special-char escaping | Inconsistent, often invalid XML | Full escaping for &, <, >, ", control chars |
| Multi-sheet workbooks | First sheet only | All sheets or named sheet |
| 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 |
| Requires internet | Yes | No |
The converter reads XLS and XLSX directly with its own parser. You do not need Microsoft Office, LibreOffice, or any spreadsheet application installed on the server. This avoids licensing costs and the well-known instability of automating Excel in unattended scenarios.
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 a production integration server needs.
The output is well-formed XML. Ampersands become &, angle brackets become < and >, quotes inside attributes are escaped, and stray control characters are stripped. The XML passes through any standards-compliant parser without choking on a customer name that happened to contain an ampersand.
The same command-line tool converts Excel to PDF, DOC, HTML, CSV, JSON, ODS, TXT, and more. One installation covers all your spreadsheet conversion needs. Change -c XML to -c JSON and you get JSON output 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 shipping partner accepts purchase orders only as XML over SOAP, but the operations team builds them in Excel. Total Excel Converter X runs as a scheduled .bat on the integration server and turns the daily order workbook into XML in under three seconds. The escaping handles the special characters in customer names that broke our previous in-house parser. Drop-in replacement for a homegrown VBA script that nobody wanted to maintain."
Andreas Vogt Integration Engineer, Logistik AG
"We trade EDI documents with about forty retail partners, and a third of them want XML envelopes instead of X12 or EDIFACT. The converter sits between our spreadsheet-based order desk and the EDI gateway. Header-row mapping means each partner's XML schema lines up with the column names we already use. Encoding is set per partner via the command line. No surprises in production."
Priya Subramanian EDI Specialist, Wholesale Distribution
"We file regulatory returns to the central bank in XML on a weekly cadence. The source data is reconciled in Excel by the finance team and then has to become a strictly encoded XML payload. The converter's UTF-8 output and clean ampersand escaping pass the regulator's validator on the first try. We still post-process the output through XSLT to fit the exact target schema, but the conversion step itself is reliable and fast."
Marc Lefevre Regulatory Reporting Lead, Banque Mutuelle
XLSConverter.exe C:\Sheets\*.xlsx C:\Output\ -c XML. This converts every Excel workbook in the source folder to XML. Add flags like -Encoding UTF-8, -FirstRowAsHeader true, or -log to control the output structure and encoding.-FirstRowAsHeader true and the converter uses each column header as the element name for that field, so a CustomerName column produces <CustomerName> elements. Without that flag the converter falls back to generic Column1, Column2 tags. Row nodes default to <Row>; this gives you a predictable, regular structure that maps cleanly to most consuming schemas.-Encoding flag. UTF-8 is the safe default for SOAP, EDI, and most modern integrations. Use UTF-16 when a downstream system specifically requires it, or a Windows code page when feeding a legacy partner that expects single-byte XML.&, angle brackets become < and >, double quotes inside attribute values become ", and stray control characters that would break an XML 1.0 parser are stripped. The output validates against any standards-compliant parser without manual cleanup.-Sheet "Invoices" to convert only one named worksheet, or -Sheet 1 to pick by zero-based index. Hidden sheets and chart sheets are skipped.XLSConverter.XLSConverterX). You can call it from .NET, PHP, Python, VBScript, ASP, Ruby, Perl, and any other COM-compatible environment to convert Excel uploads to XML in real time and forward the result to a SOAP endpoint or message queue.
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;