我尝试使用OLEDB读取Excel文件。 我可以正确读取整数,但是当我想阅读文本时会出现问题。
我也尝试过IMEX = 1,但它没有用!
以下是我的示例代码:
connectionString = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + file + ";Extended Properties='Excel 8.0;IMEX=1;HDR=Yes'");
adapter = new OleDbDataAdapter("SELECT * FROM [" + sheet + "$]", connectionString);
DataSet data= new DataSet();
adapter.Fill(data);
答案 0 :(得分:0)
虽然我在设置IMEX = 1
之前没遇到过这个问题,但这可能会有所帮助设置IMEX = 1告诉驱动程序使用导入模式。在此状态下,将注意到注册表设置ImportMixedTypes = Text。这会强制将混合数据转换为文本。为了使其可靠地工作,您可能还必须修改注册表设置TypeGuessRows = 8。默认情况下,ISAM驱动程序查看前八行,并从该采样确定数据类型。如果这8行采样都是数字,那么设置IMEX = 1将不会将默认数据类型转换为Text;它将保持数字。
你必须小心IMEX = 1不要乱用。这是IMPORT模式,因此如果您尝试在此模式下执行数据追加或更新,结果可能无法预测。
IMEX的可能设置是: 0是导出模式 1是导入模式 2是链接模式(完全更新功能)
答案 1 :(得分:0)
使用
connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + file + @";Extended Properties=""Excel 8.0;IMEX=1;HDR=YES;IMEX=1;TypeGuessRows=0;ImportMixedTypes=Text""";
这在阅读时应该有所帮助,但是如果你想写的话要小心 - IMEX = 1表示这是导入模式,用这个设置写入会产生不可预测的结果。
答案 2 :(得分:0)
我在阅读.XLSX时遇到了类似的问题,这就是我在连接字符串中提供的内容并且有效。
connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + @";Extended Properties=""Excel 12.0;IMEX=1;HDR=YES;IMEX=1;TypeGuessRows=0;ImportMixedTypes=Text""";
答案 3 :(得分:-1)
尝试在Excel工作表的前5行插入5个虚拟行。 这样,所有连续的行都将被标识为字符串。您可以进一步进行数据类型转换。 然后删除代码上的5个虚拟行。