ACE OLEDB"外部表格不符合预期格式"在Excel单元格中使用大文本

时间:2016-11-24 13:10:58

标签: c# excel oledb ms-jet-ace

我试图使用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
  • 连接字符串扩展属性=" Excel 8.0;"
  • 连接字符串扩展属性=" Excel 12.0;"

从我的研究看来,旧的JET提供程序似乎用于将字段截断为255个字符。我无法在不抛出异常的情况下让ACE读取文件。

1 个答案:

答案 0 :(得分:3)

您似乎遇到了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;\";" +
        "";

...它确实读取了“Legal”列中的所有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的Excel自动化完成重新保存。)