在Excel单元格中有大量文本的ACE OLEDB“外部表格不是预期的格式”

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

尝试.Open() OleDbConnection时,我得到以下exception:

 Exception thrown: 'System.Data.OleDb.OleDbException' in System.Data.dll Additional information: External table is not in the expected format. 

我已经最小化.xls文件,似乎文本单元格是什么导致exception。 我有安装在x64操作系统上的MS Office 2010 x86。

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

  • ACE 12.0 x86
  • ACE 12.0 x64
  • ACE 15.0 x32
  • registry调整设置TypeGuessRows = 0
  • 连接stringIMEX = 1
  • 连接string扩展属性=“Excel 8.0;”
  • 连接string扩展属性=“Excel 12.0;”

从我的研究看来,旧的JET提供程序用于截断字段为255个字符。 我不能让ACE读取文件而不抛出exception。

您似乎遇到了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自动化完成。)