4

我正在尝试通过 OLEDB 阅读器读取 xls 文件,在一列 xls 中具有混合数据类型。Oledb 为这些列值返回 DBNULL。我05-06-12在本专栏的第一个单元格中。当我去检查格式单元格时,它会显示给我custom type with dd-mm-yy,而在所有其他单元格中,它会显示一般格式。我正在使用以下连接字符串

mCon.ConnectionString = ("Provider=Microsoft.ACE.OLEDB.12.0;data source=" + mstrFilePath + ";Extended Properties=\"Excel 12.0;HDR=NO;IMEX=1\";");

我在 xls 中有以下数据

  • 05-06-12
  • 'ABC'
  • '56565'

OLEDB 是这样读取的

  • 2012 年 6 月 5 日
  • DBNULL
  • DBNULL

可能是什么原因 ?即使我IMEX = 1输入了连接字符串!

4

4 回答 4

3

我在阅读 xlsx 文件时遇到了类似的问题。我将连接字符串更改为以下内容并且它有效:

const string con = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\MyExcel.xlsx;" +"Extended Properties=\"Excel 12.0;IMEX=1;HDR=YES;TypeGuessRows=0;ImportMixedTypes=Text\"";

您需要将 xls 转换为 xlsx 并使用

Microsoft.ACE.OLEDB.12.0

读取 xlsx 文件。

于 2015-12-23T06:35:59.177 回答
1

经过几个小时的反复试验并寻找解决方案后,我开始使用这个:

"Provider=Microsoft.ACE.OLEDB.12.0; Data Source= {0}; Extended Properties=\"Excel 12.0;IMEX=2;HDR=YES;TypeGuessRows=0;ImportMixedTypes=Text\""

笔记:

  1. IMEX = 2
  2. HDR = YES,最重要的是
  3. 扩展属性应该用双引号括起来

抱歉,这也不起作用...使用了错误的文件:-(

于 2014-07-11T19:53:04.853 回答
1

像这样添加Importmixedtypes=text到您的连接字符串

mCon.ConnectionString = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1;Importmixedtypes=text;typeguessrows=0;\"",mstrFilePath);
于 2013-06-17T10:24:37.753 回答
-1

我猜你的连接字符串是错误的。如果 Excel 版本是 2007 或更高版本(即 .xlsx 扩展名),那么我们需要使用 ACE 引擎,否则对于 xls 文件(在您的情况下),我们应该使用 Jet 引擎连接字符串。请用您现有的字符串替换下面提到的字符串。我想问题应该得到解决。

mCon.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
                  "Data Source=" + FilePath + ";" +
                  "Extended Properties='Excel 8.0;HDR=Yes;IMEX=1' ";
于 2013-06-17T12:39:56.040 回答