我正在尝试通过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中有以下数据
OLEDB像这样读取它
可能是什么原因?甚至我把IMEX = 1
放在连接字符串!!!
答案 0 :(得分:3)
我在阅读xlsx文件时遇到了类似的问题。我将连接字符串更改为以下内容并且有效:
80
您需要将xls转换为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\"";
阅读xlsx文件。
答案 1 :(得分: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);
答案 2 :(得分:1)
经过几个小时的反复试验并寻找解决方案后,我开始研究:
"Provider=Microsoft.ACE.OLEDB.12.0; Data Source= {0}; Extended Properties=\"Excel 12.0;IMEX=2;HDR=YES;TypeGuessRows=0;ImportMixedTypes=Text\""
注意:强>
抱歉这也不行......用错了文件: - (
答案 3 :(得分:-1)
我猜你的连接字符串是错误的。如果Excel版本是2007或更高版本(即.xlsx扩展名),那么我们需要在xls文件的情况下使用ACE引擎(在您的情况下),我们应该使用Jet引擎连接字符串。请用您现有的字符串替换下面提到的字符串。我想问题应该得到解决。
mCon.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=" + FilePath + ";" +
"Extended Properties='Excel 8.0;HDR=Yes;IMEX=1' ";