我尝试使用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文件并重新运行我的代码,它将毫无例外地运行并按预期执行。没有问题,效果很好。
其他信息: 运行Windows 7 x64 / Excel 2010
答案 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文件