Excel interop在Office 2007的计算机上运行,​​但在使用Office 2010的计算机上失败

dev*_*xer 9 c# com dll excel excel-interop

我有一个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();
Run Code Online (Sandbox Code Playgroud)

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

用于Office\PIA\Office14\Microsoft.Office.Interop.Excel.dll的C:\ Program Files\Microsoft Visual Studio 10.0\Visual Studio工具

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

  • 复制Local = False
  • 嵌入互操作类型=真
  • 具体版本=真

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

  • 复制Local = True
  • 嵌入互操作类型=假
  • 具体版本=真

但是在使用Office 2010的计算机上,这些尝试都没有奏效.

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

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

编辑

为了回应Alex的回答,我尝试将应用程序构建为任何CPU,X86和X64,但它没有任何区别.我仍然得到相同的"类未注册"错误.

编辑2

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

编辑3

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

dev*_*xer 5

初步答案:我的软件很好,特定机器上的设置出了问题.

编辑

我刚刚发现了一些可能是问题根源的东西.问题机器有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