Excel 互操作在装有 Office 2007 的机器上工作,但在装有 Office 2010 的机器上失败
Posted
技术标签:
【中文标题】Excel 互操作在装有 Office 2007 的机器上工作,但在装有 Office 2010 的机器上失败【英文标题】:Excel interop works on machine with Office 2007 but fails on machine with Office 2010 【发布时间】:2011-08-28 12:04:26 【问题描述】:我有一个 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 上使用默认设置运行应用程序:
复制本地 = 错误 嵌入互操作类型 = 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 位计算机上对其进行了测试。再次没有错误。我认为这意味着特定机器有问题,这不是我的软件的错。啊编程。
【问题讨论】:
【参考方案1】:初步回答:我的软件很好,但特定机器上的设置有问题。
编辑
我刚刚发现了一些可能是问题的根源。问题机器有 Office,但它设置为 click-to-run(从 Internet 运行)而不是 MSI-based(从 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
【讨论】:
以上是关于Excel 互操作在装有 Office 2007 的机器上工作,但在装有 Office 2010 的机器上失败的主要内容,如果未能解决你的问题,请参考以下文章
在 VB.NET 中使用 Word 和 Outlook 2007 的 Office 互操作