这是我第一次在 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 设置为可见并显示警报,以编程方式打开和关闭文件也不会出现任何弹出窗口。一个特别的警告如下:
“此工作簿中的一个或多个工作表的名称包含方括号:[]。为避免在引用这些工作表时出现意外结果,请从其名称中删除任何方括号。”
这似乎不是一个致命错误,但它会导致其他程序将其标记为不可读,因为我们无法确定内容的完整性(即意外结果)。所以我需要的不是忽略这些弹出窗口或改进其他程序,而是捕获这个讨厌的弹出消息。如果有人可以阐明此弹出窗口行为的二元性或提供不同的方法来捕获警报,将不胜感激!