Oledb阅读器不能正确读取excel文件

我想通过OLEDB阅读器读取xls文件,在xls的一列中混合使用数据types。 Oledb将这些列值返回给我DBNULL。 我05-06-12在这个专栏的第一个单元格。 当我去检查格式单元格时,它显示我custom type with dd-mm-yy和所有其他单元格中显示常规格式。 我正在使用以下连接string

 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像这样读取

  • 05君12
  • 的DBNull
  • 的DBNull

可能是什么原因 ? 即使我把连接stringIMEX = 1

阅读xlsx文件时遇到类似的问题。 我改变了我的连接string以下,它的工作:

 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文件。

Importmixedtypes=text添加到你的connectonstring中

 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); 

经过几个小时的反复试验,我find了解决办法:

 "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 =是,最重要的是
  3. 扩展属性应该用双引号括起来

对不起,这不工作太…使用错误的文件:-(

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

 mCon.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + FilePath + ";" + "Extended Properties='Excel 8.0;HDR=Yes;IMEX=1' ";