C#问题从excel读取文本

时间:2011-09-14 16:00:21

标签: c# excel oledb

我尝试使用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);

4 个答案:

答案 0 :(得分:0)

虽然我在设置IMEX = 1

之前没遇到过这个问题,但这可能会有所帮助

设置IMEX = 1告诉驱动程序使用导入模式。在此状态下,将注意到注册表设置ImportMixedTypes = Text。这会强制将混合数据转换为文本。为了使其可靠地工作,您可能还必须修改注册表设置TypeGuessRows = 8。默认情况下,ISAM驱动程序查看前八行,并从该采样确定数据类型。如果这8行采样都是数字,那么设置IMEX = 1将不会将默认数据类型转换为Text;它将保持数字。

你必须小心IMEX = 1不要乱用。这是IMPORT模式,因此如果您尝试在此模式下执行数据追加或更新,结果可能无法预测。

IMEX的可能设置是:         0是导出模式         1是导入模式         2是链接模式(完全更新功能)

http://support.microsoft.com/kb/194124

答案 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个虚拟行。