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\""
注意:
- IMEX = 2
- HDR =是,最重要的是
- 扩展属性应该用双引号括起来
对不起,这不工作太…使用错误的文件:-(
我猜你的连接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' ";