我正在构建一个生成一些数据然后将其输出到 Excel 工作表的应用程序。有时这张表格有数千行长,所以我使用 BackgroundWorker 来处理它(请注意,我使用了一个进度条来阻止编辑以阻止用户在生成电子表格时对其进行修改)。
不幸的是,当发生这种情况时,程序由于 COM 异常而随机崩溃。随机是指异常发生在执行过程中的不同时间,有时根本不会发生。这是导致问题的代码,总是在使用sheet
变量的行上调用异常。
Public Sub modifyCell(ByRef sheet As Worksheet, ByVal row As Integer, ByVal column As Integer, ByRef value As String)
sheet.Cells(row, column) = value
End Sub
Public Sub colorRange(ByRef sheet As Worksheet, ByVal iRow As Integer, ByVal iCol As Integer, ByVal fRow As Integer, ByVal fCol As Integer, ByVal color As Integer, ByRef type As String)
If type Is "Interior" Then
sheet.Range(sheet.Cells(iRow, iCol), sheet.Cells(fRow, fCol)).Interior.ColorIndex = color
ElseIf type Is "Font" Then
sheet.Range(sheet.Cells(iRow, iCol), sheet.Cells(fRow, fCol)).Font.ColorIndex = color
End If
End Sub
异常以不同的形式显示,包括“返回参数的类型无效。”、“来自 HRESULT 的异常:0x800A03EC”和其他一些 HRESULT 代码。
另一个可能很重要的奇怪之处 - 如果我捕捉到该异常然后立即执行同一行,它就可以工作。(即以下允许程序成功完成)
Try
modify sheet code
Catch ex As Exception
identical modify sheet code
End Try
我已经做了很多狩猎,但我不知道如何阻止这种情况发生。异常的随机性使我认为它可能类似于在不可预测的时间运行的垃圾收集器,但我不知道如何去测试该理论。