禁用 Excel Debug/End 弹出窗口或从 c# 项目读取 excel 变量
Disable Excel Debug/End popup or Read excel variable from c# project
我有一个 C# Interop 方法可以打开一个 excel 文件,运行一个宏,保存并关闭它。
private void DoExcelMacro(string fileName, string macroName)
{
Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook workbook;
workbook = excel.Workbooks.Open(fileName);
excel.DisplayAlerts = false;
excel.Run(macroName);
Worksheet ws = workbook.ActiveSheet;
workbook.SaveAs(fileName);
excel.DisplayAlerts = true;
ws = null;
workbook.Close();
workbook = null;
excel = null;
GC.Collect();
}
它工作得很好,除非宏中出现错误,例如:
Public Sub MacroEntry()
Dim test AS Integer
test = "A"
End Sub
关闭 DisplayAlerts
不起作用。如果我在弹出窗口中单击 "End",我会在我的 C# 应用程序中收到错误。
问题 1:有没有办法抑制错误弹出窗口,但让错误落入 C# 应用程序?
或
我可以修改 Excel 宏来捕获错误
Public macroError As ErrObject
Public Sub MacroEntry()
On Error GoTo ErrorHandler
Dim test As Integer
test = "A"
ErrorHandler:
Set macroError = Err
Exit Sub
End Sub
问题 2:我如何从 C# Interop 对象中读取 Excel 变量 macroError
?
如果可能的话,我更喜欢问题 1 的解决方案。
如果你是 运行 一个通常是 Sub(void returning) 的宏,然后更改为 Function(happy-path returns a string of ""),但会捕获错误,您可以在 C# 中检查非空字符串。
Public Function MacroEntry() As String
On Error GoTo ErrorHandler
Dim test As Integer
test = "A"
Exit Function
ErrorHandler:
MacroEntry= Err.Description
Exit Function
End Function
C#:
string macroErrorReturn = excel.Run(macroName).ToString();
if (macroErrorReturn != "") {
//error occurred in macro
}
我有一个 C# Interop 方法可以打开一个 excel 文件,运行一个宏,保存并关闭它。
private void DoExcelMacro(string fileName, string macroName)
{
Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook workbook;
workbook = excel.Workbooks.Open(fileName);
excel.DisplayAlerts = false;
excel.Run(macroName);
Worksheet ws = workbook.ActiveSheet;
workbook.SaveAs(fileName);
excel.DisplayAlerts = true;
ws = null;
workbook.Close();
workbook = null;
excel = null;
GC.Collect();
}
它工作得很好,除非宏中出现错误,例如:
Public Sub MacroEntry()
Dim test AS Integer
test = "A"
End Sub
关闭 DisplayAlerts
不起作用。如果我在弹出窗口中单击 "End",我会在我的 C# 应用程序中收到错误。
问题 1:有没有办法抑制错误弹出窗口,但让错误落入 C# 应用程序?
或
我可以修改 Excel 宏来捕获错误
Public macroError As ErrObject
Public Sub MacroEntry()
On Error GoTo ErrorHandler
Dim test As Integer
test = "A"
ErrorHandler:
Set macroError = Err
Exit Sub
End Sub
问题 2:我如何从 C# Interop 对象中读取 Excel 变量 macroError
?
如果可能的话,我更喜欢问题 1 的解决方案。
如果你是 运行 一个通常是 Sub(void returning) 的宏,然后更改为 Function(happy-path returns a string of ""),但会捕获错误,您可以在 C# 中检查非空字符串。
Public Function MacroEntry() As String
On Error GoTo ErrorHandler
Dim test As Integer
test = "A"
Exit Function
ErrorHandler:
MacroEntry= Err.Description
Exit Function
End Function
C#:
string macroErrorReturn = excel.Run(macroName).ToString();
if (macroErrorReturn != "") {
//error occurred in macro
}