1

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

我的连接字符串是:

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

当我执行我的代码时,它失败并出现异常说明:

用户代码未处理 OldDbException

外部表不是预期的格式。

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

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

附加信息:运行 Windows 7 x64 / Excel 2010

4

1 回答 1

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 文件

于 2013-07-04T22:57:35.557 回答