如何解决异常:调用被被调用者拒绝.(C#中的HRESULT异常:0x80010001(RPC_E_CALL_REJECTED))?

Man*_*yak 14 c# excel interop comexception

我在控制台应用程序中编写了一个C#代码来打开两个excel,并将数据从一个excel复制并粘贴到另一个excel.它工作正常,直到目标excel的可见性为真.但是我需要在执行时隐藏excel.所以我将可见性改为false.喜欢,

  _destExcelApp = new Excel.ApplicationClass();
  _destExcelApp.Visible = false;
Run Code Online (Sandbox Code Playgroud)

现在它显示了一个例外

呼叫被被叫方拒绝了.(来自HRESULT的异常:0x80010001(RPC_E_CALL_REJECTED))

怎么解决这个?

小智 20

当我将应用程序部署到没有完全激活和许可的Excel安装的计算机上时,我遇到了同样的错误.我花了好几个小时试图诊断问题.确保检查Office安装以确保它们完整.

  • 我一直遇到与未激活的Excel版本相同的问题.我认为一般来说,这是因为Excel在您调用它时很忙 - 这可能是因为它试图显示一个对话警告您没有有效的许可证,或者您可能正在尝试打开一个包含链接的电子表格并且链接的电子表格不可用等.我认为通常解决方案是如上所述实现IMessageFilter(我还没有尝试过).我通过只读打开电子表格,禁用链接等来解决这个问题. (2认同)
  • 遗憾的是这并不适用于所有情况。我的 Excel 已注册,但收到上述错误。 (2认同)

Joo*_*ost 10

我在这个问题的帮助下解决了这个行为:

“呼叫被被叫方拒绝”的奇怪行为。Excel 异常

问题只是Workbook.Open当我发出Worksheet.SaveAs命令时还没有完成。所以有时,脚本会起作用,有时不会。

我只是在脚本中添加了一个暂停之后Workbook.Open,它就起作用了。我继续寻找一个属性Ready,它让我可以做我想做的事:

$excel = New-Object -ComObject "Excel.Application" -ea Stop
$wb = $excel.Workbooks.Open($workbook)
$sheet = $wb.Sheets("List")
while (-not $excel.Ready) {
     sleep 1
}
$sheet.SaveAs($csvpath,6)
Run Code Online (Sandbox Code Playgroud)

所以就我而言,它与未激活或损坏的 Excel 安装无关。


CJB*_*JBS 6

确保 MS Word/Excel 没有显示需要响应的对话框。

我在导致失败的行上设置了一个断点,然后.Visible在 PowerShell 中设置为 true,以找到以下内容:

$word.Visible = $true
Run Code Online (Sandbox Code Playgroud)

MS Word 设置默认程序提示

单击“是”并更新设置后,在我重新运行脚本化 COM 交互后,它们成功了。


Ali*_*fer 5

我遇到了同样的错误,并且建议的许多解决方案对我不起作用.我有一个在Windows 8中运行的应用程序,我发现问题是Excel总是要求为"xlsx"扩展选择默认应用程序.执行应用程序时,没有出现窗口对话框,只显示错误.

我解决了问题转到控制面板>程序>默认程序并将Microsoft Office Excel 2016设置为xlsx文件的默认程序.

  • 摘要:所以通过这里的答案,我们可以得出结论,当Excel在弹出窗口中显示任何消息时可能会发生此错误,例如"此软件未激活"或"您希望Excel成为DOCX文件的默认应用程序吗? ". (2认同)