我正在尝试使用C#中的Microsoft.Jet.OLEDB.4.0 **以编程方式读取Excel电子表格(.xlsm格式)的内容 .
我的连接字符串是:
Provider = Microsoft.Jet.OLEDB.4.0;扩展属性=“Excel 8.0; HDR = YES; IMEX = 1;”“;数据源=”C:\ Test.xlsm“
当我执行我的代码时,它失败并带有异常声明:
OldDbException未被用户代码处理外部表不是预期的格式 .
但是 - 如果我在Excel中打开Test.xlsm文件并重新运行我的代码,它将毫无例外地工作并按预期执行 . 没问题,效果很好 .
-
为什么/在Excel中打开特定文件如何更改我的代码访问它的方式?
-
使用Microsoft Jet OLEDB提供程序打开.xlsm文件的正确方法是什么?
附加信息:运行Windows 7 x64 / Excel 2010
1 回答
“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文件