OleDbDataReader没有看到单元格中的数据(.xlsx)

时间:2012-07-11 10:06:01

标签: c# excel datareader xlsx oledbdatareader

阅读xlsx文件有一个非常奇怪的问题(我正在使用OleDbDataReader)。

我在那里有一个由以下数据组成的列:

  • 50595855
  • 59528522
  • C_213154
  • 23141411

问题在于,当我阅读本专栏时,读者告诉我第三行是空的。 Excel中的列格式设置为“常规”。但是当我将格式设置为“文本”时,一切正常,读者可以看到该行中的数据。

所以只是为了实验,我在前两行加上字母前缀,看起来如下:

  • C_50595855
  • C_59528522
  • C_213154
  • 23141411

即使列格式设置为“常规”,读者也会毫无问题地读取所有内容。

所以Excel在加载之前显然以某种方式分析了列中的数据,当列的第一个单元格看起来像数字而其余部分是文本时,它会变得混乱。

我真的很奇怪,因为细胞中有数据或没有。

任何人都有任何想法为什么会这样?

非常感谢任何帮助。

此致 伊戈尔

1 个答案:

答案 0 :(得分:4)

正如您所推测的那样,这是由混合数据类型引起的问题。如果您搜索“OleDBDataReader混合类型”,您将获得一些答案。这是描述问题的MSDN page

“此问题是由Excel ISAM驱动程序的限制引起的,因为一旦确定Excel列的数据类型,它将为任何非ISAM驱动程序默认为该数据类型的值返回Null Excel列.Excel ISAM驱动程序通过检查前几行中的实际值来确定Excel列的数据类型,然后选择表示其采样中大多数值的数据类型。“

......和解决方案:

“确保Excel中的数据以文本形式输入。只需将Excel列重新格式化为Text即可完成此操作。重新格式化Excel列后必须重新输入现有值。在Excel中,您可以使用F5重新输入 - 输入所选单元格中的现有值。

您可以添加选项IMEX = 1;到OpenDatabase方法中的Excel连接字符串。例如:

Set Db = OpenDatabase("C:\Temp\Book1.xls", False, True, "Excel 8.0; HDR=NO; IMEX=1;")