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

c# Excel Application File Format issue

我有一个小问题,无法在 Whosebug 上找到任何解决方案。 情况: 我有一个自动打开 EXCEL 应用程序的应用程序。当它打开时,它会立即出现一个对话框,上面写着 "The file format and extension of xxx don't match. The file could be corrupted or unsafe..." 我正在尝试创建一个专注于此 运行 EXCEL 应用程序的应用程序并点击 "YES" 并使用 VERSION 2007 重新保存 excel 这样就不会再出现此错误消息.

这是我目前的情况:

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

不确定如何使用 excelApp 变量在 YES 上执行点击事件。 我也试过

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

11 月2017 年 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 并有错误消息显示这将引发异常,因为应用程序正忙于错误消息。

我不知道有什么方法可以完全按照您的描述进行操作——拦截应用程序中的对话框。

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

您好,您可以创建另一个应用程序,您可以在其中编写 Excel 的关闭警报框逻辑并从您的主应用程序执行

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

所以不需要用户交互来关闭这个警告框, 您可以在数据库中保存不同的警报消息,并检查此消息是否出现在您可以关闭的警报框中

感谢大家的帮助。我能够解决这个问题并使用 REGEDIT 禁用 Microsoft Excel 应用程序的所有警报。这是解决这种情况的唯一方法。只是发布一个答案来帮助处于相同情况的其他人:

REGEDIT Solution (Read near the bottom)