簡體   English   中英

c#Excel應用程序文件格式問題

[英]c# Excel Application File Format issue

我有一個小問題,我在StackOverFlow上找不到任何解決方案。 情況:我有一個可以自動打開EXCEL應用程序的應用程序。 當它打開時,立即顯示一個對話框,提示“ xxx的文件格式和擴展名不匹配。該文件可能已損壞或不安全...”,我正在嘗試創建一個專注於此正在運行的EXCEL應用程序的應用程序並點擊“是”並使用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"))
                ....
        }

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並顯示錯誤消息,這將引發異常,因為應用程序正忙於錯誤消息。

我不知道一種完全按照您的描述進行操作的方法-攔截應用程序中的對話框。

我認為您想做的是首先讓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 Application的所有警報。 這是解決這種情況的唯一方法。 只需發布答案以幫助處於相同情況的其他人:

REGEDIT解決方案(在底部附近閱讀)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM