【发布时间】:2011-05-13 01:29:14
【问题描述】:
我正在使用来自http://exceldatareader.codeplex.com/ 的 Excel 数据阅读器读取 XLSX(Microsoft Excel XML 文件),并且遇到了丢失数据的问题。库返回的数据集中缺少源 Excel 电子表格中的数据。
下面是我正在做的更多细节:
- 在 Excel 中创建了一个简单的测试电子表格,其中包含一个工作表、一个标题行和两个数据行。保存并关闭 Excel。
- 打开文件并将流传递到 CreateOpenXmlReader() 方法并取回 IExcelDataReader。
- 在 IExcelDataReader 上调用 AsDataSet() 方法并返回一个 DataSet。
- 从表 0 的第 1 行获取 ItemArray。
- 循环遍历 ItemArray。发现缺少数据(即在我期望 System.string 成员的地方有 System.DBNull 成员)。
这里有更多的分析...
我调试了代码并查看了 ExcelDataReader 对象模型的内部。找到了一个名为“SST”的非公共字符串数组,它似乎包含电子表格中的数据作为单个线性(一维)数组。
仔细检查后,我发现该数组中也缺少我要查找的数据。在这个原始数据中,该成员根本不存在。
我的猜测是,由于某种原因,解析器没有从 OOXML 中提取数据并得出单元格为空的结论。查看 OOXML 本身,数据似乎被拆分为 sharedStrings.xml 和 sheet1.xml 文件,因此解析器可能很难将所有这些放在一起。
以二进制格式(Excel 97 到 2003)保存文件并读取它可以解决问题,所以表面上似乎证实了我的怀疑是读取 OOXML 格式。
建议?
作为权宜之计,我正在将所有文件转换为二进制格式,但这似乎是一个杂项。有什么方法可以让我的 OOXML 格式的 Excel 文件使用 Excel 数据阅读器正确读取?
【问题讨论】: