【问题标题】:ACE OLEDB "External table is not in the expected format" with large text in Excel cellACE OLEDB“外部表格不是预期的格式”,Excel 单元格中有大文本
【发布时间】:2017-04-08 19:27:59
【问题描述】:

我正在尝试使用 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 读取文件。

【问题讨论】:

  • 该异常表明您正尝试从 .NET 应用程序执行此操作。如果是这样,那么如果您使用C#VB.NET 或其他标记问题,您可能会得到更好的帮助。也就是说,我无法从 C# 重现您的问题。您能否提供一个小示例 .xls 文件的链接来演示该错误?
  • 是的,c#。将样本上传到dropfile.to/EZmAt3K
  • 在 Excel 中,您可以尝试数据选项卡 > 从 Access > 选择 excel 文件 > 等,然后在属性中检查生成的连接字符串。否则,您可以尝试一些 ODBC 驱动程序connectionstrings.com/excel-2007-odbc

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


【解决方案1】:

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

【讨论】:

  • 嗨,戈德。你这个大男人!感谢您确认 ACE 中的错误并提供解决方法。我最终破坏了我的办公室安装,试图卸载 ACE15 :-(。对于其他任何人,我也将尝试 ExcelDataReader 项目。谢谢!
猜你喜欢
  • 2010-11-11
  • 1970-01-01
  • 1970-01-01
  • 2015-04-02
  • 2016-07-04
  • 1970-01-01
  • 1970-01-01
  • 2015-07-16
  • 1970-01-01
相关资源
最近更新 更多