如何快速解析伪装为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
相关产品推荐
相关产品推荐

