2011-05-19 94 views
8

我有一个使用Excel interop从Excel文件读取数据的C#WPF(.NET 4.0)应用程序。Excel interop在Office 2007计算机上运行,​​但在Office 2010计算机上运行失败

当我在我的开发机器上运行这个应用程序,它有Excel 2007,它工作正常。当我有Excel 2010中安装了另一台机器上运行它,它失败,出现以下错误信息:

System.Runtime.InteropServices.COMException (0x80040154): Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80040154 Class not registered (Exception from 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的默认设置:

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

我还试图运行具有以下设置应用程序对引用的dll:

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

但与Office 2010的计算机上,无论这些尝试的工作。

其他说明:Office 2010的机器是64位w/Windows 7.我的开发机器是带有Windows XP的X86。

问题

是什么原因造成了“类未注册”的例外,如何解决?

编辑

针对Alex的答案,我试图构建的应用程序作为任何CPU,X86和X64,但它并没有区别。我仍然得到相同的“班级未注册”错误。

编辑2

刚试过的应用程序在32位计算机上与Office 2010没有错误。因此,它可能是与特定的机器做错了事,也可以是64位和Office 2010

编辑3

奥凯的组合,所以现在我已经测试了不同与Office 2010的64位机器。再次没有错误。我认为这意味着某台机器出了问题,而这不是我的软件故障。啊编程。

回答

5

初步答案:我的软件很好,并且在特定机器上的设置有问题。

编辑

我刚刚发现了一些东西,也可能是问题的根源。问题机器有Office,但它设置为click-to-run(运行在互联网上)而不是(从EXE运行)。这意味着某些注册表设置,DLL,组件等不可用于Microsoft.Office.Interop.Excel,因此它失败。

编辑2

那是肯定的问题。刚刚升级到完整的基于MSI的Office安装,并且一切都很好。

编辑3

添加这个bug微软连接:

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

相关问题