如何在C#中解决HRESULT:0x80010001(RPC_E_CALL_REJECTED):Excel互操作?



我正在用C#/WPF做一个项目,我用Microsoft.Office.Interop.Excel读写多个Excel文件。

当我阅读Excel文件时,有时当我阅读第1382行有时是2218行等时,我随机遇到此错误

PS :我的办公包已激活。 我尝试使用:

Thread.Sleep(100);

里面有,但剂量不起作用,例外仍然是一样的。

请任何帮助,我在这一点上被阻止了,我没有找到任何解决方案。

提前感谢,

您是否可能安装了思科网ex 会议? 在花太多时间在这上面(见下文(之后,我终于确定这是我的问题。

在Excel中,这列在"加载项"下,如"快捷会议工具","Cisco WebEx LLC","C:\Program Files (x86(\Webex\Plugins\ptwbxms64.dll"。 对于我的损坏案例,DLL 的文件版本为 3910.0.1910.3000,日期为 2019-11-15,为 1,493,240 字节,以及 cb49aeafa37e5313907da5c42ff470db22ecde88fa7c4afc8ed59aae7c28d70a 的 SHA-256 校验和。 思科 Webex 会议在版本 39.10.4.5 中报告为"最新"。

我一直在 Outlook 中使用 Webex 功能 - 但不知道为什么它甚至需要在 Word、Excel 等中单独启用......

既往研究

(不完全是一个答案,但需要一个我可以回复一些长度的地方,当我继续看这个时可能会编辑,并允许其他人用他们自己的评论回复......

我在这里看到了类似的东西 - 使用使用ComObject Excel.Application的PowerShell脚本,并且将近一年没有变化。 在过去一周内开始收到相同的错误。 无法始终如一地重现,但也无法完成复杂的确定性脚本,而不会在完成之前失败。 相同的脚本(仍然(在另一台运行类似配置的计算机上工作。

我现在认为我已经在这里排除了任何Windows或Office更新。 2 个版本相同的系统,一个有效,另一个无效。 两者都是 Windows 10 1909 内部版本 18363.535、O365 1911 内部版本 12228.20364 CTR,截至 2019 年 12 月 11 日已完全修补。

我的一个语句现在随机失败的示例:

$wsUsers.Name = 'Users'

。其中$wsUsers是新创建的 Excel 工作表。

另一个常见的故障点,其中$hc是范围("标题列"(:

$hc.Font.Bold = $true
$hc.Interior.ColorIndex = 15

第一行(如果事情没有先在其他地方中断(总是成功的。 但是,第二行(现在(经常出现此错误故障。

假设这与最近的更新无关,那么关于如何解决异常:呼叫被调用方拒绝了,还有很多其他建议。(来自 HRESULT 的例外:0x80010001 (RPC_E_CALL_REJECTED(( 在 C# 中?.

我确实尝试在受影响的设备上对 O365 进行"在线修复",但没有更改。 我还完全卸载/重新安装了O365,没有任何变化。

下面是一个最小的测试用例:

#Requires -Version 5.0
Set-StrictMode -Version Latest
$ErrorActionPreference = 'Stop'
$excel = New-Object -ComObject Excel.Application -Verbose:$false
try{
try{
$excel.Visible = $true
$wb = $excel.Workbooks.Add()
$i = 0
try{
for(; $i -le 1000; $i++){
Write-Host "Ready1: $($excel.Ready)"
$wsAbout = $wb.Worksheets[1]
Write-Host "Ready2: $($excel.Ready)"
$wsAbout.Name = "About $i"
}
}catch{
Write-Host "Ready3: $($excel.Ready)"
Write-Host "Failed at $i".
throw $_
}
}finally{
$wb.Close($false, [System.Reflection.Missing]::Value, [System.Reflection.Missing]::Value)
}
}finally{
$excel.Quit()
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)
}

在第一个系统上,这总是在第一次迭代中的某个地方失败(以前在同一系统上工作过(。 在第二个系统上,我无法让它失败。

最典型的故障:

Ready1: True
Ready2: True
Ready1: True
Ready3: True
Failed at 101 .
Call was rejected by callee. (Exception from HRESULT: 0x80010001 (RPC_E_CALL_REJECTED))
At ....ps1:16 char:17
+                 $wsAbout = $wb.Worksheets[1]
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : OperationStopped: (:) [], COMException
+ FullyQualifiedErrorId : System.Runtime.InteropServices.COMException

考虑另一个奇怪的错误:

Ready1: True
Ready2: True
Ready1: True
Ready2: True
Ready1: True
Ready2: True
Ready1: True
Ready3: True
Failed at 3 .
Cannot index into a null array.
At ....ps1:16 char:17
+                 $wsAbout = $wb.Worksheets[1]
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : NullArray

有人向我解释工作表如何在前 3 次迭代中存在,而不是第 4 次迭代?

我已经花了太多时间深入研究这个问题。 计划接下来重新安装我的系统...

最新更新