2013-11-14 15 views
5

Sto lavorando con l'oggetto COM Interop di Excel. Sto scrivendo un metodo in cui sto aprendo e chiudendo un'applicazione Excel seguita dall'apertura di una cartella di lavoro e di un foglio Excel. Dopo aver finito di lavorarci, sto chiudendo sia l'applicazione che la cartella di lavoro. Il mio problema è che questo metodo può essere chiamato più volte ripetutamente e quando il foglio e l'app sono chiusi ottengo un messaggio dall'applicazione Excel se voglio salvare le modifiche che ho apportato. Il metodo si blocca fino a quando non preme "No", ma non posso dire all'utente di premere ogni volta.Chiusura dell'applicazione Excel con Interoperabilità Excel senza messaggio di salvataggio

Come posso chiudere l'applicazione senza ricevere questo messaggio o almeno rispondervi tramite codice?

Questi sono i metodi che sto usando per chiudere l'applicazione e la cartella di lavoro:

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(); 
} 

e questo è il modo in cui io li sto usando:

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

in modo da non sta salvando i cambiamenti che si stanno facendo sul foglio di lavoro giusto? –

+0

Sto solo leggendo dal foglio di lavoro, non aggiornandolo. Non so perché mi sta anche chiedendo se voglio salvare eventuali modifiche –

+0

Duplicato di [Cercando di uscire da C# cartella di lavoro Excel senza una finestra di dialogo] (http://stackoverflow.com/questions/17413887/trying-to-exit -c-sharp-excel-lavoro-senza-un-finestra-box). Si prega di utilizzare la ricerca. – CodeCaster

risposta

7

Mentre chiudendo gli cartella di lavoro Excel è possibile utilizzare seguenti dichiarazioni:

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

In realtà non è nemmeno necessario creare una variabile. Il seguente funziona per me: xlWorkBook.Close (false, Missing.Value, Missing.Value); –

+1

il suo prompt che mostrava ancora – Arbaaz

2

fare questo quando si chiude cartella di lavoro.

_excelWorkBook.Close(true); 
+0

Questo ha funzionato per me. La risposta accettata ha corrotto il mio file (idk come). –

+0

non ha funzionato per me sta ancora mostrando il prompt – Arbaaz

2

Prova questa:

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

non funzionava, mostra ancora il prompt – Arbaaz

2

Il mio problema era simile. Avevo bisogno di generare un foglio Excel, quindi convertirlo in PDF. Il mio problema era che l'app Excel stava visualizzando e mi notifica di salvare prima di uscire. La soluzione stava tramontando .Visible = flase e .DisplayAlerts = False

Grazie alla @adil

+0

Questo ha funzionato per me! La sintassi era "myExcel.Visible = false; myExcel.DisplayAlerts = false;" – blackorchid

Problemi correlati