C#问题从Excel中读取文本
我尝试使用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);
这可能有帮助,虽然我没有遇到这个问题之前设置IMEX = 1
设置IMEX = 1告诉驱动程序使用导入模式。 在这种状态下,registry设置ImportMixedTypes = Text将被注意到。 这迫使混合数据被转换为文本。 为了可靠地工作,您可能还必须修改registry设置,TypeGuessRows = 8。 默认情况下,ISAM驱动程序会查看前八行,并从该采样中确定数据types。 如果这八行采样都是数字,那么设置IMEX = 1不会将默认数据types转换为文本; 它将保持数字。
你必须小心,不要盲目使用IMEX = 1。 这是IMPORT模式,所以如果您尝试在此模式下执行附加或更新数据,结果可能无法预测。
IMEX的可能设置是:0是导出模式1是导入模式2是链接模式(完全更新function)
使用
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说这是导入模式,写这个设置产生不可预知的结果。
在阅读.XLSX时,我遇到了类似的问题,这是我在连接string中提供的,它工作。
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""";
尝试在Excel表格的前5行插入5个虚拟行。 这样,所有连续的行将被标识为string。 你可以进一步做你的数据types转换。 然后删除代码上的5个虚拟行。