读取xlsx文件时遇到一个非常奇怪的问题(我使用的是OleDbDataReader)。
我有一个由以下数据组成的专栏:
- 50595855
- 59528522
- C_213154
- 23141411
问题是,当我阅读本专栏时,读者会告诉我第三行是空的。Excel中的列格式设置为"常规"。但当我将格式设置为"文本"时,一切都很好,读者可以看到该行中的数据。
所以,为了进行实验,我在前两行前面加了一个字母,并使其看起来如下:
- C_50595855
- C_59528522
- C_213154
- 23141411
即使将列格式设置为"常规",读者也能毫无问题地阅读所有内容。
因此,Excel显然在加载列之前以某种方式分析了列中的数据,当列的第一个单元格看起来像数字,而其他一些单元格是文本时,它会感到困惑。。
这对我来说真的很奇怪,因为要么单元格里有数据,要么没有。
有人知道为什么会发生这种事吗?
任何帮助都将不胜感激。
谨致问候,Igor
正如您推测的那样,这是由混合数据类型引起的问题。如果你在"OleDBDataReader混合类型"上搜索,你会得到一些答案。下面是一个描述问题的MSDN页面:
"这个问题是由Excel ISAM驱动程序的限制引起的,因为一旦它确定了Excel列的数据类型,它将为任何不是ISAM驱动为该Excel列默认的数据类型的值返回Null表示其采样中的大多数值。"
以及解决方案:
"请确保Excel中的数据是以文本形式输入的。仅将Excel列重新格式化为文本无法完成此操作。重新格式化Excel列后,您必须重新输入现有值。在Excel中,您可以使用F5键重新输入所选单元格中的现有值。
您可以添加选项IMEX=1;到OpenDatabase方法中的Excel连接字符串。例如:
Set Db = OpenDatabase("C:TempBook1.xls", False, True, "Excel 8.0; HDR=NO; IMEX=1;")
"