我有一些小问题,我无法在StackOverFlow上找到任何解决方案。 情况: 我有一个自动打开EXCEL应用程序的应用程序。当它立即打开时会出现一个对话框,显示“文件格式和xxx的扩展名不匹配。文件可能已损坏或不安全......” 我正在尝试创建一个专注于此正在运行的EXCEL应用程序的应用程序并点击“YES”并使用VERSION 2007重新保存excel,以便此错误消息不会再次出现。
这是我到目前为止所拥有的:
var excelApp = (Excel.Application)Marshal.GetActiveObject("Excel.Application");
var c = excelApp.ActiveDialog;
不确定如何使用excelApp变量对YES执行click事件。 我也试过了
foreach (Process proc in Process.GetProcesses())
{
if (proc.MainWindowTitle.Contains("Excel"))
....
}
十一月06 2017年: 这就是我现在所拥有的:
var oExcelApp = (Excel.Application)Marshal.GetActiveObject("Excel.Application");
Process[] processlist = Process.GetProcessesByName("Excel"); //Shows number of running Excel apps
foreach (Process theprocess in processlist) //foreach Excel app running
{
if (oExcelApp.Workbooks.Count >= 0) //for worbooks in each Excel app
{
foreach (Excel.Workbook wkb in oExcelApp.Application.Workbooks)
{
wkb.SaveAs(filePath, Excel.XlFileFormat.xlExcel8);
wkb.Close(true, null, null);
Marshal.FinalReleaseComObject(wkb);
}
oExcelApp.Workbooks.Close();
}
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
oExcelApp.Quit();
Marshal.ReleaseComObject(oExcelApp);
}
这仅适用于如果开头没有错误消息。如果进程自动打开excel并显示错误消息,则会抛出异常,因为应用程序正忙于显示错误消息。
答案 0 :(得分:0)
我不知道如何完成您所描述的操作 - 拦截应用程序中的对话框。
我认为您想要做的是首先让Excel暂停警告。您可以通过将DisplayAlerts
属性修改为false来执行此操作。
var excelApp = (Excel.Application)Marshal.GetActiveObject("Excel.Application");
excelApp.DisplayAlerts = false;
// This should not give you any warnings
excelApp.Workbooks.Open("c:/cdh/test.xls");
当你完成后,把事情按原样放回去:
excelApp.DisplayAlerts = true;
答案 1 :(得分:0)
您可以创建另一个应用程序,您可以在其中编写Excel关闭警报框的逻辑并从主应用程序执行
foreach (Process proc in Process.GetProcesses())
{
if (proc.MainWindowTitle.Contains("Excel"))
....
},
所以不需要用户交互来关闭此警告框, 并且您可以在数据库中保存不同的警报消息,并检查此消息是否在警报框中,您可以关闭
答案 2 :(得分:0)
感谢大家的帮助。我能够绕过这个并使用REGEDIT禁用Microsoft Excel应用程序的所有警报。这是解决这种情况的唯一方法。只需在相同的情况下发布答案以帮助其他人: