OLEDB连接字符串失败 - Excel打开时除外...?

时间:2013-07-04 14:20:34

标签: c# .net excel oledb

我尝试使用C#中的Microsoft.Jet.OLEDB.4.0 **以编程方式阅读Excel电子表格(.xlsm格式)的内容。

我的连接字符串是:

  

Provider = Microsoft.Jet.OLEDB.4.0;扩展属性=" Excel 8.0; HDR = YES; IMEX = 1;"&#34 ;;数据源=" C:\ Test.xlsm"

当我执行我的代码时,它会失败并显示异常:

  

OldDbException未被用户代码

处理      

外部表格不符合预期格式。

但是 - 如果我在Excel中打开Test.xlsm文件并重新运行我的代码,它将毫无例外地运行并按预期执行。没有问题,效果很好。

  • 为什么/如何在Excel中打开特定文件会改变我的代码访问它的方式?
  • 使用Microsoft Jet OLEDB提供程序打开.xlsm文件的正确方法是什么?

其他信息: 运行Windows 7 x64 / Excel 2010

1 个答案:

答案 0 :(得分:0)

“Excel 8.0;”连接字符串的一部分是指Excel 2003和早期文件(即.xls扩展名)

您可能希望尝试使用Excel 2007以上的连接字符串,并专门针对.xlsm文件使用该版本:

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\test.xlsm;Extended Properties=""Excel 12.0 Macro;HDR=YES"";

(需要""来逃避"字符)

Excel连接字符串通常写在Provider的顺序中;数据源;扩展属性。您使用的连接字符串具有不同的顺序,并且似乎对其中的"个字符进行了一些不一致的处理。您的原始连接字符串应该写为:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Test.xlsm;Extended Properties=""Excel 8.0;HDR=YES;IMEX=1"";

即便如此,它也可能不适用于.xlsm文件