c#Excel应用程序文件格式问题

我有一个小问题,我无法在StackOverFlow上find任何解决scheme。 情况:我有一个自动打开EXCEL应用程序的应用程序。 当它打开它马上给出一个对话框,说:“xxx的文件格式和扩展名不匹配。该文件可能损坏或不安全…”我想创build一个应用程序,重点放在这个正在运行的EXCEL应用程序并点击“是”,然后重新维护版本2007,所以这个错误信息不会再出现。

这是我迄今为止:

var excelApp = (Excel.Application)Marshal.GetActiveObject("Excel.Application"); var c = excelApp.ActiveDialog; 

不知道如何使用excelAppvariables在YES上执行单击事件。 我也试过了

 foreach (Process proc in Process.GetProcesses()) { if (proc.MainWindowTitle.Contains("Excel")) .... } 

2017年11月6日:这是我到目前为止:

  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并显示错误消息,则会显示exception,因为应用程序正忙于显示错误消息。

我不知道有什么办法来完成你所描述的 – 截取应用程序中的对话框。

我想你想要做的就是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; 

嗨,你可以创build另一个应用程序,您可以在其中编写Excel的closures警报框的逻辑,并从您的主应用程序执行

 foreach (Process proc in Process.GetProcesses()) { if (proc.MainWindowTitle.Contains("Excel")) .... }, 

所以不需要用户交互closures这个警报框,并且你可以在数据库中保存不同的警报信息,并检查这个信息是否进入警报框你可以closures

感谢你的帮助。 我能够解决这个问题,并使用REGEDIT禁用Microsoft Excel应用程序的所有警报。 这是解决这个问题的唯一方法。 只要发布一个答案,以帮助其他人在相同的情况下:

REGEDIT解决scheme(阅读附近的底部)