You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何快速解析伪装为XLS格式的XML电子表格文件?

解决方案

你的文件是Excel XML Spreadsheet(XMLSS),这是Excel早期支持的纯XML格式,既不是传统二进制BIFF结构的.xls,也不是标准OOXML压缩包类型的.xlsx,所以常规的OleDB和OpenXML解析方法都会失败:

  • Microsoft.ACE.OLEDB.12.0驱动仅适配二进制.xls与压缩包.xlsx格式,无法识别纯XML结构的XMLSS,因此抛出格式异常。
  • DocumentFormat.OpenXml是针对OOXML压缩包设计的工具,你的文件没有压缩包必备的中央目录结构,自然会触发找不到目录记录的错误。

针对这类文件,有两种高效处理方式:

1. 直接以XML格式解析

既然文件本质是纯XML结构,完全可以用常规XML解析工具读取:

  • 在C#中,可使用XDocument或XmlDocument加载文件,通过遍历固定XML节点提取数据。XMLSS的结构有明确层级:<Workbook>包含<Worksheet>,工作表下的<Table>包含<Row>,每行下的<Cell>对应单元格,部分单元格会通过<Data>标签存储具体值。

示例代码(C#):

var doc = XDocument.Load("your-file.xls");
var ns = "urn:schemas-microsoft-com:office:spreadsheet";
var worksheets = doc.Descendants(XName.Get("Worksheet", ns));
foreach (var sheet in worksheets)
{
    var rows = sheet.Descendants(XName.Get("Row", ns));
    foreach (var row in rows)
    {
        var cells = row.Descendants(XName.Get("Cell", ns));
        foreach (var cell in cells)
        {
            var cellValue = cell.Descendants(XName.Get("Data", ns)).FirstOrDefault()?.Value;
            // 处理单元格数据
        }
    }
}

2. 使用专用库简化解析

如果不想手动处理XML节点,可以用支持XMLSS格式的Excel解析库:

  • ExcelDataReader:该库内置XmlSpreadsheetReader,专门适配这种纯XML格式的Excel文件,能直接将数据转换为DataTable或DataSet,操作逻辑和处理常规Excel文件一致。

示例代码(C#):

using (var stream = File.OpenRead("your-file.xls"))
{
    using (var reader = XmlSpreadsheetReader.Create(stream))
    {
        var dataSet = reader.AsDataSet();
        // 操作DataSet中的表格数据
    }
}

另外,你也可以先将文件后缀改为.xml,用Excel打开后查看完整结构,能更清晰地理解数据节点的组织逻辑,方便后续解析。

内容的提问来源于stack exchange,提问作者mb14

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 03:55:13