Excel 互操作 - 远程过程调用失败或 RPC_E_SERVERFAULT

xar*_*arx 4 microsoft-office automation rpc microsoft-excel

我们有一个内部调用 excel 的 C# 应用程序。它使用 Microsoft.Office.Interop.Excel.dll 来实现。该应用程序适用于大多数装有 Excel 的计算机,但不适用于我的计算机。

最初,应用程序因 HRESULT 0x800706BE 失败(远程过程调用失败)。我尝试了几乎所有在网上找到的建议,但都没有成功。然后我卸载了我的 MS Office 2013 Pro,并安装了 Office 365 v2013。应用程序在同一行代码上仍然失败,但现在 HRESULT 0x80010105 (RPC_E_SERVERFAULT)。

有什么建议可以让excel互操作工作吗?我的猜测是某些 Windows 服务未启动或 DCOM 组件未注册。但我不知道是哪一个。

细节:

  • Windows 7 x64、MS Office 2013 专业版/365 专业增强版
  • 它是一个 C# 应用程序。它是使用 VS2010 for .NET 4.0 编译的,但即使应用程序是使用 VS2012 for .NET 4.5 编译的,也会出现问题。使用不同版本的 Microsoft.Office.Interop.Excel.dll。

我认为三个事实很重要:

  • 该应用程序可在其他计算机上运行,​​因此问题的原因不是该应用程序。
  • 即使重新安装(稍微不同的版本)excel (2013) 后,该应用程序也无法运行,因此这可能不是 excel 本身的问题。
  • 我使用SysInternals的ProcessMonitor发现应用程序确实成功实例化了excel,并且excel成功(?)读取了.xlsx文件。但是后来excel失败了。

我还使用了 VS2010 调试器来找出发生了什么:

  • 这是代码的核心。它在 Open 的最后一行失败:

    using Excel = Microsoft.Office.Interop.Excel;
    object misValue = System.Reflection.Missing.Value;
    
    Excel.Application myExcelApp = new Excel.Application();
    myExcelApp.Visible = false;
    myExcelWorkbooks = myExcelApp.Workbooks;
    myExcelWorkbook = myExcelWorkbooks.Open(xlsxFileFullPath, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue);
    
    Run Code Online (Sandbox Code Playgroud)
  • Windows 事件日志中没有任何相关内容(在应用程序失败时)。

  • 以下是我找到的一些链接,但没有给出任何建议,或者它们没有帮助:link1 , link2 ,...(不能发布超过 2 个链接)

xar*_*arx 11

经过长时间的研究,我通过这个链接成功解决了这个问题。本质上,问题是由第三方 Excel COM 插件引起的,在我的例子中是“FoxitReader PDF Creator COM 插件”。禁用后,问题就解决了!

如何禁用插件:Excel > 文件 > 选项 > 加载项 > 管理,然后选择“COM 加载项”> 前往。然后取消有问题的插件。