ACE OLEDB "External table is not in the expected format" 在 Excel 单元格中有大文本
ACE OLEDB "External table is not in the expected format" with large text in Excel cell
我正在尝试使用 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 OS.
上安装了 MS Office 2010 x86
我已经尝试了以下所有方法,none 解决了问题:
- 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 读取文件。
您似乎遇到了 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 的 COM 自动化来完成。)
我正在尝试使用 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 OS.
上安装了 MS Office 2010 x86我已经尝试了以下所有方法,none 解决了问题:
- 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 读取文件。
您似乎遇到了 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 的 COM 自动化来完成。)