2012-10-24 12 views
20

Gibt es eine Möglichkeit zum Speichern von Änderungen in einer Excel-Tabelle über die Excel-Interop (in diesem Fall bin ich ein Arbeitsblatt hinzufügen), ohne den Benutzer gefragt, ob Sie möchten die vorhandene Datei mit den Änderungen überschreiben. Ich möchte nicht, dass der Benutzer die Tabellenkalkulation in meiner Anwendung öffnet, so dass ein Popup-Fenster angezeigt wird, in dem gefragt wird, ob sie die Datei überschreiben wollen, sie erscheint sehr fehl am Platz und möglicherweise verwirrend für den Benutzer.So speichern/überschreiben Sie vorhandene Excel-Datei mit Excel Interop - C#

Ich verwende die Methode workbook.SaveAs (fileloaction).

Hier initialisiere ich die COM-Referenzobjekte für das Excel-Interop.

private Excel.Application app = null; 
    private Excel.Workbook workbook = null; 

    public Excel.Workbook Workbook 
    { 
     get { return workbook; } 
     set { workbook = value; } 
    } 
    private Excel.Worksheet worksheet = null; 
    private Excel.Range workSheet_range = null; 

Unten ist der Code, den ich verwende, um die Excel-Datei zu schließen/zu speichern. Die methodbook.close() -Methodelinie ist diejenige, die Berichten zufolge die unbehandelte Ausnahme auslöst.

workbook.Close(true, startForm.excelFileLocation, Missing.Value); 
      Marshal.ReleaseComObject(app); 
      app = null; 
      System.GC.Collect(); 

Antwort

52

Grundsätzlich alles, was Sie brauchen, ist ExcelApp.DisplayAlerts = False - Hier ist, wie ich es tun, aber:

ExcelApp.DisplayAlerts = False 
ExcelWorkbook.Close(SaveChanges:=True, Filename:=CurDir & FileToSave) 

Hope this

+0

es funktionierte fantastisch Dank! Wenn nur jetzt könnte ich einen Weg finden, um es zu schließen, wie Sie oben tun, ohne dass es verursacht, dass meine C# -Anwendung eine nicht behandelte Ausnahme wirft und abstürzt. Ich kann die Anwendung nach dem Speichern und Schließen der Excel-Datei auch nicht schließen. Es muss offen bleiben. – user1546315

+0

Kannst du ein wenig Code posten (oder eine neue Frage mit diesem Code posten, wenn es nicht zu dieser Frage passt) ... Das scheint merkwürdig und ich bin mir sicher, leicht zu reparieren ... –

+0

Ich habe den Beitrag aktualisiert mit etwas Code. Wenn Sie mehr brauchen, lassen Sie es mich wissen. Ich habe bereits mehrere Threads zu diesem Problem gepostet, habe mehrere Lösungen ausprobiert, muss aber die Excel-Arbeitsmappe noch schließen/speichern können, ohne eine unbehandelte Exception zu werfen und die C# -Anwendung abstürzen zu lassen. – user1546315

7

hilft nur dieser Code für Stopp erfordern Override-Warnung oder Vorlage, die bereits verwendet wird

ExcelApp.DisplayAlerts = Falsch

0

Ich weiß, dass dies ein alter Post ist, aber ich wollte einen Weg teilen, um das zu machen, ohne in der Zukunft mögliche Frustration zu verursachen.

Erste, was Ich mag nicht über die Verwendung von: ExcelApp.DisplayAlerts = False

Das Setzen dieses Flags wird diese Eigenschaft auf der Excel-Datei gesetzt, nicht nur in Ihrem Programm. Das bedeutet, wenn ein Benutzer Änderungen an der Datei vornimmt und sie schließt (indem sie auf das X klickt), werden sie nicht aufgefordert, die Datei zu speichern, was später zu Frustration führen wird. Es deaktiviert auch alle anderen Eingabeaufforderungen, die Excel normalerweise posten würde.

ich Überprüfung mag, wenn die Datei vor dem Speichern vorhanden ist:

 if (File.Exists(SaveAsName)) 
     { 
      File.Delete(SaveAsName); 
     } 
+0

Nein, ich versuchte hier eine Änderung und schloss ohne Speichern und Excel aufgefordert, die zu speichern Datei, auf Ihre Weise wird auch funktionieren, aber ist nicht so einfach wie die erste. –

Verwandte Themen