10

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

当我在具有 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 上的默认设置运行应用程序:

  • 复制本地 = False
  • 嵌入互操作类型 = True
  • 特定版本 = True

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

  • 复制本地 = True
  • 嵌入互操作类型 = False
  • 特定版本 = True

但是在装有 Office 2010 的机器上,这些尝试都没有奏效。

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

问题

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

编辑

为了回应 Alex 的回答,我尝试将应用程序构建为 Any CPU、X86 和 X64,但没有任何区别。我仍然收到相同的“类未注册”错误。

编辑 2

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

编辑 3

好的,现在我已经在另一台装有 Office 2010 的 64 位计算机上对其进行了测试。再次没有错误。我认为这意味着特定机器有问题,这不是我的软件的错。啊编程。

4

1 回答 1

7

初步回答:我的软件很好,但特定机器上的设置有问题。

编辑

我刚刚发现了一些可能是问题的根源。问题机器有 Office,但它设置为点击运行(从 Internet 运行)而不是基于 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

于 2011-05-19T21:57:24.593 回答