2016-11-24 120 views
2

我正在尝试使用System.Data.OleDb来读取碰巧有一个非常大的文本单元(大约8900个字符)的.xls文件和Microsoft ACE OLEDB提供商。我无法控制.xls文件的内容。ACE OLEDB“外部表格不符合预期的格式”在Excel单元格中有大文本

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

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

我已经尽量减少了.xls文件,似乎文字细胞是什么原因造成的除外:

我试图.Open()OleDbConnection当出现以下情况例外。我在x64操作系统上安装了MS Office 2010 x86。

我已经尝试了所有以下的,其中没有一个解决了这个问题:

  • ACE 12.0 86
  • ACE 12.0 64
  • ACE 15.0×32
  • 注册表修改设置TypeGuessRows = 0
  • 连接字符串IMEX = 1
  • 连接字符串扩展属性=“Excel 8.0;”
  • 连接字符串扩展属性=“Excel 12.0;”

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

+0

异常表明您正在尝试从.NET应用程序执行此操作。如果是这样,那么你可以得到更好的帮助,如果你用'C#','VB.NET'或其他标签来标记问题。这就是说,我无法从C#重现您的问题。你能否提供一个链接到一个小样本.xls文件来展示错误? –

+0

是的,c#。将样本上传到https://dropfile.to/EZmAt3K。 – CoderBrien

+0

在Excel中,您可以尝试数据选项卡>从访问>选择Excel文件>等,然后检查属性中生成的连接字符串。否则,您可以尝试一些ODBC驱动程序https://www.connectionstrings.com/excel-2007-odbc/ – Slai

回答

2

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

这个问题,但我只是切换到旧的“喷气机” 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自动化完成。)

+0

嗨,Gord。你达人!感谢您确认ACE中的错误并提供解决方法。我结束了捣毁我的办公室安装尝试卸载ACE15 :-(。对于任何其他人一起,我也会给ExcelDataReader项目一个镜头以及。谢谢! – CoderBrien

+0

很高兴知道,谢谢。 –

相关问题