OleDbDataAdapter 忽略 Excel 单元格中的数据
Posted
技术标签:
【中文标题】OleDbDataAdapter 忽略 Excel 单元格中的数据【英文标题】:OleDbDataAdapter leaves out Data from Excel Cells 【发布时间】:2016-07-13 11:19:49 【问题描述】:更新:
使用开源 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();
一切似乎都运行良好,但在两个特定行中,适配器只是切断了一个单元格的最后一行(两个受影响的行在该特定单元格中具有相同的内容)。
即:
"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,就像许多相关问题上所建议的那样,但这也没有成功。
【问题讨论】:
可以显示excel表格的截图吗? 我不能因为它的机密数据 一般单元格格式不同时会出现此问题 所有单元格具有相同的格式(即只是文本)。无论如何,文件是自动生成的(通过 IBM DOORS),所以我无法控制它。 检查你的excel数据是否有转义序列等特殊字符! 【参考方案1】:如果我可以建议一种替代方法,.xlsx 文件是一个 OpenXML 文件 -- 一个包含 XML 和其他元数据的 ZIP 文件。
Microsoft 有一个 OpenXML API,允许您操作此类文件。这是访问数据的“本机”方式,并且行为应该正确。
有一个名为ClosedXML 的开源项目旨在使 OpenXML API 对开发人员更加友好。我自己没用过,但是已经看到在现有代码中成功使用了。
【讨论】:
我没有使用 ClosedXML,而是 Excel Data Reader(也是开源的),它现在可以使用。不过还是谢谢你的建议以上是关于OleDbDataAdapter 忽略 Excel 单元格中的数据的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 oleDbDataAdapter.Update(myDataSet) 更新 excel 文件
使用 Jet 的 OleDbDataAdapter 数据类型不匹配
是否有任何指示器可以知道OleDbDataAdapter是否根据提供的查询获得了记录?