使用VB 2010从Excel捕获弹出窗口,警报和异常

时间:2012-06-27 13:58:50

标签: vb.net excel exception popup alerts

这是我第一次在stackoverflow中发帖。我昨天开始学习VB 2010(虽然我确实知道一些Ruby)并且已经搜索了很多这个问题但是没有找到太多。

我编写了一个程序,该程序采用CSV文件路径列表(所有.XLS文件)并尝试打开它们。这些excel工作簿被另一个程序标记为不可读;我的程序试图捕获导致错误的警告,弹出窗口或异常。它适用于大多数异常(密码保护,不可读内容,危险文件等),但是某些弹出窗口要求您单击“确定”按钮才能继续。也许他们不被归类为例外或其他什么,我很想知道。至少得到它们的文本形式会很棒。这是我的剧本:

Private Sub runReportButton_Click(ByVal sender As System.Object, ByVal e As        System.EventArgs) Handles runReportButton.Click
    Dim Exl As New Excel.Application()
    Exl.Visible = False
    Exl.DisplayAlerts = False

    For Each row As DataGridViewRow In dgvReport.Rows
        If Not IsNothing(row.Cells(0).Value) Then
            If row.Cells(0).Value.ToString.Contains(".xls") Then

                Try
                    'Open the workbook and attempt to catch the error!'
                    'Use bogus passwords to cause Password Protected Error, Readonly disabled so the Password popup shows.  Update links disabled because it wasn't being caught anyways'
                    Dim wb As Excel.Workbook = Exl.Workbooks.Open(row.Cells(0).Value.ToString, [ReadOnly]:=False, [WriteResPassword]:="WWWWWWWWWWW", [Password]:="WWWXWXWWWXW", [UpdateLinks]:=False)
                    row.Cells(4).Value = "Could not catch an error :("
                    wb.Close(0)
                    dgvReport.Refresh()
                Catch ex As Exception
                    'Writes the Exception Message to the data grid view'
                    row.Cells(4).Value = ex.Message
                End Try
                ProgressBar1.Value += 1
            End If
        End If
        Exl.Quit()
    Next row
    dgvReport.Refresh()
End Sub

我遇到问题的原因是只有在我手动打开文件时才会出现某些弹出窗口。即使将Excel设置为可见并显示警报,也可以通过编程方式打开和关闭文件,而无需任何弹出窗口。一个特别警告如下:

  

“此工作簿中的一个或多个工作表的名称包含方括号:[]。为了避免在引用这些工作表时出现意外结果,请从名称中删除任何方括号。”

这似乎不是致命错误,但它会导致其他程序将其标记为不可读,因为我们无法确定内容的完整性(即意外结果)。所以我的需要是不要忽略这些弹出窗口或改进其他程序,它是捕获这个讨厌的弹出消息。如果有人能够对这个弹出窗口行为的二元性有所了解,或者提供一种不同的方法来捕获警报,那将非常感激!

0 个答案:

没有答案