Microsoft Excel COM自动化存在的问题

3
我在公司的产品中写了一个方法,利用Excel 2007的COM自动化导出数据,一年半之前。但现在我发现,在办公室的机器上它不再工作了。
我在自己的电脑上测试了该方法的功能,并得到了同样的结果。
深入挖掘后,我发现当我执行以下代码时:
var excel = Excel.Application
如果我在excel对象上添加一个监视器,我会发现每个属性都会抛出一个类型转换异常。
经过一些研究,我发现有些注册表键可能会干扰自动化。我设法找到并删除了一个注册表键:
HKEY_CLASSES_ROOT\TypeLib{00020813-0000-0000-C000-000000000046}\1.7
其中定义了以下字符串值:
"PrimaryInteropAssemblyName"="Microsoft.Office.Interop.Excel, Version=14.0.0.0
然后我再次运行同样的代码,这一次它完美地运行了。
我在办公室测试应用程序的其他计算机也遇到了相同的错误,但我无法以同样的方式修复它们。
有人遇到过这种情况吗?谢谢。
1个回答

1

Office的第14个版本是Office 2010,因此我假设您的办公室已经从2007年升级到了2010年。

现在,如果您的计算机是开发人员机器,那么我会期望您的计算机上有Microsoft.Office.Interop.Excel, Version=14.0.0.0程序集,因此您的修复程序可以正常工作。

然而,我猜测办公室中的其他机器已经部署了您的代码,因此它们将具有Microsoft.Office.Interop.Excel, Version=12.0.0.0程序集,但没有部署Microsoft.Office.Interop.Excel, Version=14.0.0.0

如果我是您,我会首先检查这一点。

在您的问题中描述实际错误也可能很有用,但希望我的答案能够帮助您。


不,我的计算机上没有安装任何Office 2010产品,除了可能的SharePoint Designer。发生的错误是由COM - DISP_E_MEMBERNOTFOUND引发的。在调试时,它似乎表现为无效的转换异常。 - stevenroberts
@ stevenroberts - 在这种情况下,Office 14 互操作程序集必须已经与 Visual Studio 一起安装。毕竟,如果您没有明确安装互操作程序集,它必须来自某个地方,而且仍然有可能客户端机器上没有它。您有检查过吗? - Enigmativity

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接