OLEDB连接string失败 – Excel打开时除外…?

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

我的连接string是:

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

当我执行我的代码时,它会失败,出现一个exception,声明:

OldDbException未被用户代码处理

外部表格不是预期的格式。

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

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

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

“Excel 8.0” 连接string的一部分是指Excel 2003和更早的文件(即.xls扩展名)

您可能想要尝试Excel 2007以后的连接string,并使用专门用于.xlsm文件的版本:

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

""是需要逃避"性格"

Excel连接string通常以Provider的顺序编写; 数据源; 扩展属性。 您使用的连接string的顺序不同,而且似乎也有一些不一致的"字符"处理,您原来的连接string应该写成:

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

即使这样它可能无法使用.xlsm文件