【问题标题】:Office interop is not working on several computersOffice 互操作无法在多台计算机上运行
【发布时间】:2014-04-06 02:15:18
【问题描述】:

我正在开发一个 Autodesk Revit 插件,它可以与 Excel 通信并在单元格上执行一些标准的读/写操作。我引用了 Microsoft.Office.Interop.Excel (v12.0.0.0),因为某些用户可能安装了 Office 2007 而不是 2010 或更高版本。我使用的是 Visual Studio 2013。这是代码的开头;

Excel.Application xlApp;
    Excel.Workbook xlWorkBook;
    Excel.Worksheet xlWorkSheet;
    object misValue = System.Reflection.Missing.Value;

    xlApp = new Excel.Application();

但是,在某些计算机上,这会返回以下错误:

Revit 遇到 System.Runtime.InteropServices.COMException(0x80040154):检索具有 CLSID (00024500-000-0000-C000-000000000046) 的组件的 COM 类工厂失败,原因是以下错误:80040154 未注册类(异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG)。

它适用于多台安装了 Office 2007/2010/2013 的 64 位/32 位计算机。但它也不适用于具有相同规格的其他计算机。如何找出问题所在?

编辑:在此特定行返回错误:xlApp = new Excel.Application();

有人建议注册 dll,但这不适用于 Microsoft.Office.Interop; HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))

【问题讨论】:

  • 您在项目中引用了哪个版本的 PIA?
  • 即 v12.0.0.0,Embed Interop Types 为 False,Copy Local 为 True。
  • 您是否尝试过针对 Office 2007 的 PIA 进行编译?
  • 我也尝试了 Copy Local False 和 Embed Interop Types = True,但在同一台计算机上都不起作用。
  • 我也尝试使用 v11.0.0.0 编译,没有成功

标签: c# office-interop revit


【解决方案1】:

我可能在这里找到了答案: Excel interop works on machine with Office 2007 but fails on machine with Office 2010

问题机器有 Office,但它被设置为点击运行(通过 Internet 运行)而不是基于 MSI(从 EXE 运行)。这意味着某些注册表设置、DLL、组件等对 Microsoft.Office.Interop.Excel 不可用,因此会失败。

可以从 Office 即点即用切换到基于 MSI 的 Office。

【讨论】:

  • 这是否意味着 Office Interop 在即点即用机器上完全失败,甚至无法进行后期绑定?
  • 我已经在使用基于 MSI 的安装的机器上重新安装了 Office,现在它可以工作了。
猜你喜欢
  • 2018-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-19
  • 1970-01-01
  • 2014-01-21
  • 2016-09-20
相关资源
最近更新 更多