Excel互操作在安装有Office 2007的计算机上可以正常工作,但在安装有Office 2010的计算机上失败了。

10

我有一个使用Excel互操作性从Excel文件中读取数据的C#WPF(.NET 4.0)应用程序。

当我在开发机器上运行此应用程序时(具有Excel 2007),它可以正常工作。但是,当我在另一台安装了Excel 2010的机器上运行它时,它将失败并显示以下错误消息:

System.Runtime.InteropServices.COMException (0x80040154):由于以下错误而检索组件CLSID {00024500-0000-0000-C000-000000000046}的COM类工厂失败:80040154类未注册(来自HRESULT:0x80040154(REGDB_E_CLASSNOTREG))。

尝试创建Microsoft.Office.Interop.Excel.Application对象时会出现此错误。

var app = new Application();

我的项目引用了 Microsoft.Office.Interop.Excel.dll(版本为14.0.0.0,运行时版本为v2.0.50727),该文件位于:

C:\Program Files\Microsoft Visual Studio 10.0\Visual Studio Tools for Office\PIA\Office14\Microsoft.Office.Interop.Excel.dll

我尝试使用引用dll的默认设置运行应用程序:

  • Copy Local = False
  • Embed Interop Types = True
  • Specific Version = True

我还尝试使用以下设置在已引用的dll上运行应用程序:

  • Copy Local = True
  • Embed Interop Types = False
  • Specific Version = True

但在安装了Office 2010的计算机上,这些尝试都没有成功。

其他注意事项:安装了Windows 7的64位机器上安装了Office 2010。我的开发机器是带有Windows XP的X86。

问题

是什么导致了“类未注册”异常,如何解决?

编辑

响应Alex的答案,我尝试将应用程序构建为Any CPU、X86和X64,但结果并没有改变。我仍然收到相同的“类未注册”错误。

编辑2

刚刚在安装了Office 2010的32位机器上尝试了该应用程序。没有错误。因此,这可能是特定计算机出了问题,或者是64位和Office 2010的组合出了问题。

编辑3

好吧,现在我已经在另一台安装了Office 2010的64位计算机上测试过了。同样没有错误。我认为这意味着有些东西出了问题,并且这不是我的软件的错。啊,编程。

1个回答

7
初步答案:我的软件没问题,那台机器的设置有问题。
编辑:
我刚发现了一个可能是问题源头的东西。问题机器安装了Office,但它是作为点击运行(从互联网运行)而不是基于MSI(从EXE运行)设置的。这意味着某些注册表设置、DLL、组件等对Microsoft.Office.Interop.Excel不可用,因此失败了。
编辑2:
那绝对是问题所在。刚升级到完整的基于MSI的Office安装包,一切正常。
编辑3:
将此添加为Microsoft Connect上的错误报告:

https://connect.microsoft.com/VisualStudio/feedback/details/672276/excel-interop-fails-on-machine-where-office-is-installed-as-click-to-run#details


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