2013-11-14 6 views
5

Ich arbeite mit Excel-Interop-COM-Objekt. Ich schreibe eine Methode, in der ich eine Excel-Anwendung öffne und schließe, gefolgt von einer Excel-Arbeitsmappe und einem Arbeitsblatt. Nachdem ich mit der Arbeit an ihnen fertig bin, schließe ich sowohl die Anwendung als auch die Arbeitsmappe. Mein Problem ist, dass diese Methode mehrere Male wiederholt aufgerufen werden kann und wenn das Blatt und die App schließen, bekomme ich von der Excel-Anwendung eine Nachricht, wenn ich die Änderungen speichern möchte, die ich gemacht habe. Die Methode bleibt stecken, bis ich "Nein" drücke, aber ich kann dem Benutzer nicht sagen, es jedes Mal zu drücken.Excel-Anwendung mit Excel-Interop ohne Speichernachricht schließen

Wie kann ich die Anwendung schließen, ohne diese Nachricht zu erhalten oder zumindest per Code zu beantworten?

Dies sind die Methoden, die ich bin mit der Anwendung und Arbeitsmappe schließen:

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

Und das ist die Art, wie ich sie bin mit:

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

@adil so sparen Sie nicht die Änderungen, die Sie Arbeitsblatt richtig machen auf? –

+0

Ich lese nur aus dem Arbeitsblatt, nicht aktualisieren. Ich weiß nicht, warum er mich sogar fragt, ob ich Änderungen speichern möchte –

+0

Duplikat von [versucht, C# Excel-Arbeitsmappe ohne ein Dialogfeld zu beenden] (http://stackoverflow.com/questions/17413887/trying-to-exit -c-sharp-Excel-Arbeitsmappe-ohne-eine-Dialogbox). Bitte benutzen Sie die Suche. – CodeCaster

Antwort

7

beim Schließen Ihrer Excel-Arbeitsmappe Sie folgende Anweisungen verwenden können:

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

Sie müssen tatsächlich nicht einmal eine Variable erstellen. Folgendes funktioniert für mich: xlWorkBook.Close (false, Missing.Value, Missing.Value); –

+1

seine immer noch zeigt prompt – Arbaaz

2

dies tun, wenn Arbeitsmappe schließen.

_excelWorkBook.Close(true); 
+0

Das hat für mich funktioniert. Die akzeptierte Antwort hat meine Datei beschädigt (idk how). –

+0

hat nicht funktioniert für mich, es zeigt immer noch die Eingabeaufforderung – Arbaaz

2

Try this:

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

hat nicht funktioniert, es zeigt immer noch die Eingabeaufforderung – Arbaaz

2

Mein Problem ähnlich war. Ich musste Excel Sheet generieren und dann in PDF konvertieren. Mein Problem war, dass die Excel App angezeigt wurde und ich mich vor dem Beenden darüber informiert habe. Die Lösung wurde Einstellung .Visible = flase und .DisplayAlerts = False

Dank

+0

Das hat für mich funktioniert! Die Syntax lautete "myExcel.Visible = false; myExcel.DisplayAlerts = false;" – blackorchid