通过Web服务器批量转换XLS, XLSX, ODS, XML电子表格。
Windows
2000/2003/Vista
7/8/10/11
and
2012/2016/2019/2022 Server
and
Docker/Citrix/Wine
Total Excel Converter X 是一款服务器端 SDK,可将 XLSX、XLS、XLSM、ODS、CSV 和 XML 电子表格转换为 PDF、JSON、XML、HTML、DBF、SQL 以及其他 15 种以上的格式 — 无需在服务器上安装 Microsoft Excel 或任何 Office 运行时。它以无界面方式运行:没有 GUI、没有对话框、没有弹窗。Total Excel Converter X 同时提供 命令行二进制文件和 ActiveX/COM 接口,因此可以无缝集成到 ASP、PHP、.NET、Python、Ruby、Java 以及任何其他兼容 COM 的后端中。完整支持的源格式列表如下:
-list) 进行无人值守处理。该程序直接读取工作簿 — 无需 Excel 自动化、无需 Open XML SDK 依赖,也无需照看无界面 Office 实例。
高速转换和批量处理让整个流程简单高效,无需等待。免费试用(30 天试用期,无任何限制),你会发现它物有所值。
当前支持的部分文件格式转换:
|
|
|
LLM 智能体 (Claude、ChatGPT、Cursor、Cline) 和检索流水线 (LangChain、LlamaIndex、Haystack) 并不读取 XLSX,它们读取的是文本。Total Excel Converter X 会把电子表格写成 GitHub-Flavored Markdown,配以结构化的 frontmatter 与可选的 Docling 兼容旁路文件,让工作簿进入您的向量存储时,保留其层级、表头、公式和单位 — 而不是变成一根丢失了合并单元格的扁平字符串。
选择 Markdown 输出后您会得到:
source_file、format (MIME)、generator、created、工作表数、行/列数、检测到的语言,以及用于溯源的 binary hash
# / ## / ### Markdown 标题,因此 RAG 分块器会在语义边界处切分,而不会切在表格中间
.docling.json 旁路文件 — 带单位的类型化列 (EUR、pcs、kWh、%)、规范化公式 (=qty*unit_price) 连同原始坐标 (of:=[.C5]*[.D5]),以及供分块器使用的 chunks_hint
UnstructuredMarkdownLoader / MarkdownReader 即可识别
这就是我们所说的 CoolUtils RAG Adapter — 一套统一的 Markdown 约定,由每款 Total Converter X 产品共享。完整规范、样例 .md + .docling.json 以及集成代码片段,请见 Coolutils Converter X — RAG Adapter 页面。
string src = @"C:\test\Source.xlsx";
string dest = @"C:\test\Dest.pdf";
var cnv = new ExcelConverterX();
cnv.Convert(src, dest, "-cPDF -log c:\\test\\Excel.log");
if (!string.IsNullOrEmpty(cnv.ErrorMessage))
throw new Exception(cnv.ErrorMessage);
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 srcPath = $@"{assemblyDirectoryPath}\src\sample.xlsx";
var outPath = Path.GetTempFileName() + ".pdf";
startInfo.FileName = executablePath;
if (File.Exists(outPath))
{
File.Delete(outPath);
}
if (File.Exists(executablePath) && File.Exists(srcPath))
{
sbLogs.AppendLine("files exists...");
}
else
sbLogs.AppendLine("EXE & source files NOT exists...");
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = $"{srcPath} {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"
Response.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.xlsx";
$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(dest):
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.xlsx"; 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;
"两年前我们用 Total Excel Converter X 替换了一个基于 Excel-Interop 的 COM 自动化脚本。原来的 Interop 流水线泄漏句柄、导致应用程序池崩溃,而且每台转换虚拟机都需要完整安装 Office。现在那些虚拟机只在队列后面运行 ExcelConverterX.exe。每个工作簿的转换延迟从大约 12 秒降到了 1.5 秒,Office 授权费用也省下来了。与我们 worker 的 .NET 集成只花了半天时间。"
Mateusz K.
Senior Backend Developer at a fintech
"我们的客户上传各种格式的工资单电子表格:供应商模板用的是 XLS,现代 XLSX 带宏,偶尔还有 LibreOffice 用户提交的 ODS。Total Excel Converter X 把所有内容统一规范成单一的归档 PDF 配置文件,采用 AES-256 加密,并加盖我们合规所需的权限标志。-list 队列文件加上 -verbosity detail 日志直接对接到我们的日志聚合系统。在 Windows Server Core 上无界面运行,无需 Office,毫无意外。"
Sofia L.
DevOps Engineer at a payroll SaaS
"我们将 XLSX 转 JSON 作为服务提供给 ETL 客户。Total Excel Converter X 就是该端点背后的引擎。-FirstRowIsHeader 加上直接的 JSON 输出意味着我们不必编写自己的解析器或维护单独的 CSV 转 JSON 步骤。五年来日均数千次转换的吞吐量,没有一次故障可以归咎于这款转换器。CLI 稳定可靠,每次运行的输出在二进制层面完全一致。"
Hamid Y.
CTO at an ETL platform vendor
"我们将 Total Excel Converter X 在免版税许可证下捆绑到了我们的报表产品中。一次性的项目费用只是 Aspose-Cells 按开发者订阅价格的一小部分。我们的安装程序发布并注册 ActiveX,我们的应用直接调用它,终端用户只看到我们自己的 UI。32 位 ActiveX 限制让我们多花了几天时间重做流水线,但当我们询问解决方案时支持团队响应迅速。"
Britt N.
Independent Software Vendor
"经纪人上传带嵌入照片和合并单元格的 XLSX 房源导出文件,我们需要将其转换为干净的 PDF 用于公开门户。Total Excel Converter X 在处理渲染细节(合并单元格、冻结窗格、命名区域)方面比我们评估过的开源库都更出色。使用 -combine -sort name 将十个工作簿合并为一份月度 PDF,这是我们每个发布周期都会用到的功能。"
Daichi T.
Lead .NET Developer at a real-estate platform
在服务器上将 Excel 文件转换为 PDF、DOC、CSV 等格式的开发人员和 IT 团队
通过 ActiveX 为您的 Web 应用添加 Excel 转 PDF 功能
Web 开发人员将 Total Excel ConverterX 集成到 ASP、PHP 或 .NET 应用程序中,让用户可以上传 Excel 文件并即时获得转换后的 PDF、HTML 或 CSV 输出。转换器在服务器上静默运行,无图形界面,支持多用户同时使用而不中断。
自动转换来自业务系统的 Excel 导出文件
企业 IT 团队安排 Total Excel ConverterX 处理来自 ERP、CRM 和 BI 平台的每晚 XLS 和 XLSX 导出文件。将财务报告转换为受保护的 PDF,将数据提取为数据库用的 CSV,或将电子表格转换为内部仪表板用的 HTML——全程通过命令行无人值守执行。
自动转换到达文件夹的新 Excel 文件
与 Total Folder Monitor 配合使用,Total Excel ConverterX 监控指定文件夹,在新 XLS 文件出现时自动转换。来自合作伙伴上传、FTP 投递或自动导出的电子表格被转换为所需格式并自动路由至正确目标——全程无需人工干预。
为本地网络上的所有用户提供 Excel 转换服务
组织将 Total Excel ConverterX 作为公司网络上的共享服务部署。财务、销售和运营部门的员工向集中式服务器提交 Excel 文件进行转换,输出为 PDF、DOC 或 CSV——无需在每台工作站上安装桌面转换器。
将电子表格转换功能嵌入您自己的软件
软件厂商将 Total Excel ConverterX 嵌入其产品中以添加 Excel 导出功能。ActiveX 接口通过简单的 API 调用提供转换功能——将 XLS、XLSX、ODS 和 DBF 文件转换为 PDF、HTML、CSV、SQL、LaTeX 等 15 种以上格式,适用于任何 COM 兼容应用程序。
Total Excel ConverterX 附带 ExcelConverterX.exe,这是一个可以从脚本、计划任务、CI 运行器或任何后端服务驱动的控制台二进制程序。标志集与 GUI 版的 ExcelConverter.exe 一致;完整参考请参阅命令行文档。下面的配方涵盖了我们最常从 SDK 客户那里听到的场景。
最简单的调用方式 —— 一个源文件、一个输出、一个目标格式。
ExcelConverterX.exe "C:\reports\Q4-financials.xlsx" "C:\out\Q4-financials.pdf" -cPDF
处理文件夹中的每个工作簿,并将 PDF 放入同级输出目录。将掩码替换为 *.xls、*.ods 或 *.csv 以选择不同的源格式。
ExcelConverterX.exe "C:\reports\*.xlsx" "C:\out\" -cPDF
大多数数据管道需要 CSV,但很少使用普通的逗号。使用 -td 从标准分隔符(Tab、Space、Semicolon、Comma)中选择,或使用 -td Other -tdo 设置其他任何分隔符 —— 这里是管道字符。
ExcelConverterX.exe "C:\reports\*.xlsx" "C:\out\" -cCSV -td Other -tdo "|" -FirstRowIsHeader -UseQuote
-FirstRowIsHeader 告诉转换器将第 1 行视为列名;-UseQuote 用引号包装文本字段,因此嵌入的分隔符不会破坏解析。
要将工作簿数据馈送到 REST 端点或 ETL 作业,请直接渲染为结构化格式而不是通过 CSV。
ExcelConverterX.exe "C:\reports\*.xlsx" "C:\out\" -cJSON -FirstRowIsHeader
ExcelConverterX.exe "C:\reports\*.xlsx" "C:\out\" -cXML -FirstRowIsHeader
许多会计和 ERP 工具仍然使用 DBF 表。转换器直接从工作簿写入有效的 dBase 文件。
ExcelConverterX.exe "C:\reports\customers.xlsx" "C:\out\customers.dbf" -cDBF -FirstRowIsHeader
默认情况下,每个可见工作表都会成为自己的输出文件。-sheets 仅选择您命名的工作表;-cs 将它们合并到单个文档中;-ExportAll 包含隐藏的工作表。
ExcelConverterX.exe "C:\reports\workbook.xlsx" "C:\out\summary.pdf" -cPDF -sheets "Summary;Q4;Forecast" -cs
月末报告通常意味着将十个或二十个工作簿拼接成一份交付物。-combine 按源文件顺序将它们合并成一个 PDF;-sort name 控制该顺序。
ExcelConverterX.exe "C:\reports\monthly\*.xlsx" "C:\out\monthly-pack.pdf" -cPDF -combine -sort name
当工作簿位于嵌套的客户文件夹中时,-Recurse 遍历子目录,-kfs 在输出端重新创建相同的树,而不是将所有内容展平到一个桶中。
ExcelConverterX.exe "C:\clients\*.xlsx" "C:\out\clients\" -cPDF -Recurse -kfs
向外部收件人发送财务的标准做法:所有者密码锁定编辑/打印权限,用户密码控制文件打开,AES-256 加密保持其稳固。
ExcelConverterX.exe "C:\reports\*.xlsx" "C:\out\" -cPDF -mp "owner-pwd" -up "user-pwd" -perm Print -EncryptStrength es256AES
用 Copy、Modify、Annotation、FormFill、HighResPrint 的任意组合替换 Print,以准确授予您想要的权限。如果源工作簿本身受密码保护,请预先添加 -Pass "wb-pwd"。
当工作进程写入队列文件而转换器消耗它时,您不希望将文件路径编码到命令行本身。-list 从文本文件中读取文件掩码(每行一个);-verbosity detail 每个文件写一行;-logmode append 在多次运行之间保留历史。
ExcelConverterX.exe -list "C:\queues\batch.txt" "C:\out\" -cPDF -log "C:\logs\xlsxconv.log" -verbosity detail -logmode append
new COM("ExcelConverter.ExcelConverterX"),.NET 中使用 new ExcelConverterX(),Python 中使用 win32com.client.Dispatch,Ruby 中使用 WIN32OLE.new。或者,可以从任何进程、调度程序或 shell 脚本调用 ExcelConverterX.exe 命令行二进制文件。还提供通过 ConvertToStream 直接进行 PDF 流式传输,适用于 ASP/PHP Web 响应。-mp "owner-pwd" 设置所有者密码,使用 -up "user-pwd" 限制文件打开。-perm 标志接受 Print、HighResPrint、Copy、Modify、Annotation、FormFill 的任意组合。加密强度由 -EncryptStrength es256AES 控制。如果源工作簿本身受密码保护,请预先传递 -Pass "workbook-pwd",以便转换器能够打开它。-sheets "Summary;Q4;Forecast" 从工作簿中选择命名工作表。添加 -cs 将选定的工作表合并到单个输出文档中,或使用 -ExportAll 将隐藏的工作表也包含进来。要按源文件顺序将多个工作簿合并为一个 PDF,对文件夹掩码运行 -combine -sort name。-Recurse 遍历子目录,-kfs 在输出端镜像文件夹树,而不是将所有内容平铺到一个目录中。.md 作为输出格式,转换器就会输出 GitHub-Flavored Markdown:每个工作表变成一张保留了多行表头、合并单元格以及双语列标题的 GFM 表格。YAML frontmatter 块承载 source_file、MIME format、工作表数、行/列数、检测到的语言、generator,以及用于溯源的 binary hash。工作簿层级 (workbook → sheets → named ranges → header bands) 映射到 # / ## / ### Markdown 标题,因此 RAG 分块器会在语义边界处切分,而不会切在表格中间。这是 CoolUtils RAG Adapter 的一部分 — 每款 Total Converter X 产品共享同一套 Markdown 约定。=qty*unit_price) 连同原始单元格坐标 (of:=[.C5]*[.D5])、每个工作表的边界矩形、用于溯源的 binary_hash,以及您的分块器可读取的 chunks_hint 数组。在命令行中使用 -Docling 启用。JSON 与 Markdown 相互独立 — 您可以两者都送进索引,或者跳过它只使用 .md。.md 文件是带 YAML frontmatter 块的纯 GFM,因此 LangChain 的 UnstructuredMarkdownLoader、LlamaIndex 的 MarkdownReader、Haystack 的 MarkdownToDocument 与 Claude Code 的 MCP 文件工具均可直接读取。对于 Claude、ChatGPT 或任意聊天 UI,您可以将 Markdown 原样粘贴进上下文 — 表格能渲染出来,标题显示出某个分块来自哪一节,frontmatter 给模型提供源文件名与语言提示。可选的 .docling.json 旁路文件供 Docling 感知型摄取器或任何需要类型化列的自定义加载器使用。ExcelConverterX.exe "C:\reports\Q4.xlsx" "C:\out\" -cMD -Docling。-cMD 选择 Markdown 输出;-Docling 额外输出 .docling.json 旁路文件。加上 -sheets "Summary;Q4;Forecast" 限定范围,-Recurse 遍历子目录,或 -list "queue.txt" 用于无人值守流水线。COM 调用:obj.Convert("Q4.xlsx", "Q4.md", "-cMD -Docling")。生成的 Markdown 可直接分块、嵌入并在任意向量存储中建立索引。