2013-11-14 52 views
5

我正在使用Excel Interop COM對象。 我在寫一種方法,在這種方法中打開和關閉Excel應用程序,然後打開Excel工作簿和工作表。在完成它們之後,我正在關閉應用程序和工作簿。 我的問題是,這個方法可以重複調用幾次,當表格和應用程序關閉時,我會從Excel應用程序獲取一條消息,如果我想保存所做的更改。該方法卡住,直到我按「否」,但我不能告訴用戶每次按下它。使用Excel Interop關閉Excel應用程序而不保存消息

如何關閉應用程序而不接收此消息或至少通過代碼回答它?

這些都是我用來關閉應用程序和工作簿的方法:

private void FreeWorkSheetResources(Excel.Worksheet sheet) 
{ 
    Marshal.ReleaseComObject(sheet); 
    sheet = null; 
} 

private void FreeWorkBookResources() 
{ 
    if (_excelSheets != null) 
    { 
    Marshal.ReleaseComObject(_excelSheets); 
    _excelSheets = null; 
    } 
    _excelWorkBook.Close(); 
    Marshal.ReleaseComObject(_excelWorkBook); 
    _excelWorkBook = null; 
} 

private void FreeApplicationResources() 
{ 
    _app.Quit(); 
    Marshal.ReleaseComObject(_app); 
    _app = null; 
    GC.Collect(); 
} 

這是我用他們的方式:

if (_app == null) 
    { 
    _app = new Excel.Application(); 
    } 
    if (_excelWorkBook == null) 
    { 
    _excelWorkBook = GetWorkBook(_filePath); 
    } 
    .... 
    .... 
    FreeWorkBookResources(); 
    FreeApplicationResources(); 
+0

這樣你就不會保存您正在對工作權的變化? –

+0

我只是從工作表中閱讀,沒有更新它。我不知道他爲什麼要問我是否想保存任何更改 –

+0

重複[嘗試退出沒有對話框的C#Excel工作簿](http://stackoverflow.com/questions/17413887/trying-to-exit -c鋒利Excel的工作簿而不-A-對話框的框)。請使用搜索。 – CodeCaster

回答

7

同時關閉Excel工作簿,您可以使用下面的語句:

object misValue = System.Reflection.Missing.Value; 
xlWorkBook.Close(false, misValue, misValue); 
+1

你甚至不需要創建一個變量。以下適用於我:xlWorkBook.Close(false,Missing.Value,Missing.Value); –

+1

其仍然顯示提示 – Arbaaz

2

關閉工作簿時,執行此操作。

_excelWorkBook.Close(true); 
+0

這對我有用。接受的答案損壞了我的文件(idk如何)。 –

+0

沒有爲我工作,它仍然顯示提示 – Arbaaz

2

試試這個:

excelApp.DisplayAlerts = False; 
//save and close your workbook 
excelApp.DisplayAlerts = True; 
+0

沒有工作,它仍然顯示提示 – Arbaaz

2

我的問題是相似的。我需要生成Excel工作表,然後將其轉換爲PDF。我的問題是Excel應用程序正在顯示並通知我在退出前保存。該解決方案是設置.Visible = flase.DisplayAlerts = False

由於@adil

+0

這對我有效!語法是「myExcel.Visible = false; myExcel.DisplayAlerts = false;」 – blackorchid

相關問題