c#-ACE OLEDB“外部表格式不正确”在Excel单元格中带有大文本

我正在尝试使用System.Data.OleDb和Microsoft ACE OLEDB提供程序读取一个碰巧具有非常大的文本单元(大约8900个字符)的.xls文件.我无法控制.xls文件的内容.

尝试.Open()OleDbConnection时收到以下异常:

Exception thrown: 'System.Data.OleDb.OleDbException' in System.Data.dll

Additional information: External table is not in the expected format.

我已将.xls文件最小化,似乎文本单元格是导致异常的原因.我在x64操作系统上安装了MS Office 2010 x86.

我已经尝试了以下所有方法,但都没有解决问题:

> ACE 12.0 x86
> ACE 12.0 x64
> ACE 15.0 x32
>注册表调整以设置TypeGuessRows = 0
>连接字符串IMEX = 1
>连接字符串Extended Properties =“ Excel 8.0;”
>连接字符串Extended Properties =“ Excel 12.0;”

根据我的研究,似乎旧的JET提供程序曾经将字段截断为255个字符.我不能在没有抛出异常的情况下让ACE完全读取文件.

解决方法:

您似乎在使用Access数据库引擎(ACE)处理较旧的.xls文件时遇到问题.我可以使用重现该问题

myConnectionString =
        "Provider=Microsoft.ACE.OLEDB.12.0;" +
        @"Data Source=C:\Users\Public\test\sample.xls;" +
        "Extended Properties=\"Excel 8.0;HDR=YES;\";" +
        "";

但是当我简单地切换到较旧的“ Jet” OLEDB提供程序(32位)时,没有发生任何错误…

myConnectionString =
        "Provider=Microsoft.Jet.OLEDB.4.0;" +
        @"Data Source=C:\Users\Public\test\sample.xls;" +
        "Extended Properties=\"Excel 8.0;HDR=YES;\";" +
        "";

…,它确实读取了“法律”列中的所有8927个字符(即未将其截断为255个字符).

如果确实需要使用ACE OLEDB提供程序,那么我发现将.xls文件另存为.xlsx并使用

myConnectionString =
        "Provider=Microsoft.ACE.OLEDB.12.0;" +
        @"Data Source=C:\Users\Public\test\sample2.xlsx;" +
        "Extended Properties=\"Excel 12.0;HDR=YES;\";" +
        "";

也有效. (大概可以从C#应用程序中使用Excel的COM自动化来完成重新保存.)

上一篇:如何使用OleDB闪避Excel文件中的空行?


下一篇:OleDB读取Excel时出现空数据的解决方法