首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >修改Excel工作表时随机发生的COM异常

修改Excel工作表时随机发生的COM异常
EN

Stack Overflow用户
提问于 2012-10-24 06:31:02
回答 1查看 309关注 0票数 3

我正在构建一个应用程序,它生成一些数据,然后将其输出到Excel工作表。有时这个工作表有几千行之多,所以我使用BackgroundWorker来处理它(请注意,我使用了一个进度条来阻止编辑,以阻止用户在生成电子表格时修改它)。

不幸的是,当这种情况发生时,程序由于COM异常而随机崩溃。所谓随机,我的意思是异常在执行过程中发生在不同的时间,有时根本不会发生。以下是导致问题的代码,异常总是使用sheet变量在各行上调用。

代码语言:javascript
运行
复制
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代码。

另一个可能很重要的奇怪之处是-如果我捕捉到该异常,然后立即执行同一行,它就会工作。(例如,以下内容允许程序成功完成)

代码语言:javascript
运行
复制
Try
    modify sheet code
Catch ex As Exception
    identical modify sheet code
End Try

我已经做了相当多的搜寻,但我想不出如何阻止这种情况发生。异常的随机性让我认为它可能类似于垃圾收集器,它在不可预测的时间运行,但我不知道如何测试这一理论。

EN

回答 1

Stack Overflow用户

发布于 2012-10-30 00:43:37

我以前遇到过Excel电子表格的奇怪的COM异常,我的解决方案是禁用Excel的自动恢复功能。Interop似乎真的很挑剔,不能随时访问Excel,而且对我来说,每当有任何东西中断它时,它都会抛出异常。

可以禁用自动恢复,如下所示:

代码语言:javascript
运行
复制
xlApp.Autorecover.Enabled = False

但记住在最后再次启用它,否则它将永远关闭。

我不确定这是否能解决你的问题,但它可能值得一试。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13040342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档