0

更新:

使用开源 ExcelDataReader ( https://www.nuget.org/packages/ExcelDataReader/ ) 解决了这个问题。


我正在从这样的 .xlsx 文件中读取数据

DataSet ds = new DataSet();
OleDbConnection cn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties= Excel 12.0;");

cn.Open();

OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM ["Sheet1$"]", cn);
da.Fill(ds, "Sheet1$");

cn.Close();

一切似乎都工作正常,但在两个特定行中,适配器只是切断了一个单元格的最后一行(两个受影响的行在该特定单元格中具有相同的内容)。

IE:

"1 : 0x01 : Text_Example1(sometext)
 2 : 0x02 : Text_Example2(sometext)
 3 : 0x04 : TexT_Example3(sometext)"

becomes

"1 : 0x01 : Text_Example1(sometext)
 2 : 0x02 : Text_Example2(sometext)
 3 :"

这里有什么问题,我该如何解决?对我来说,这似乎完全是随机的,因为在所有其他行中都不会出现这个问题。

编辑:我已经尝试过扩展属性 HDR = NO/YES 和 IMEX = 0/1,就像许多相关问题上所建议的那样,但这也没有奏效。

4

1 回答 1

0

如果我可以建议另一种方法,.xlsx 文件是一个 OpenXML 文件——一个包含 XML 和其他元数据的 ZIP 文件。

Microsoft 有一个 OpenXML API,允许您操作此类文件。这是访问数据的“本机”方式,并且应该正确运行。

有一个名为ClosedXML的开源项目,旨在使 OpenXML API 对开发人员更加友好。我自己没有使用过它,但已经看到它在现有代码中成功使用。

于 2016-07-13T21:59:31.530 回答