Verwenden von Interop mit C#, Excel. Speichern Sie das sich ändernde Original.Wie kann man das negieren?

StackOverflow https://stackoverflow.com/questions/29141

  •  09-06-2019
  •  | 
  •  

Frage

Das Problem:Laden einer Excel-Tabellenvorlage.Verwenden Sie den Befehl „Speichern“ mit einem anderen Dateinamen und beenden Sie dann das Interop-Objekt.Dadurch wird letztendlich die ursprüngliche Vorlagendatei gespeichert.Nicht das Ergebnis, das gefällt.

public void saveAndExit(string filename)
{        
    excelApplication.Save(filename);
    excelApplication.Quit();
}

Die geöffnete Originaldatei ist C: testing template.xls Der Dateiname, der in IS C: Testing 7777 (Datum) übergeben wird .xls .xls

Hat jemand eine Antwort?

(Die Antwort, die ich gewählt habe, war die korrekteste und gründlichste, obwohl wbk.Close() die Übergabe von Parametern erfordert.Danke.)

War es hilfreich?

Lösung

Excel-Interop ist ziemlich mühsam.Ich habe ein altes Projekt ausgegraben, das ich hatte, ein wenig herumgefummelt und ich denke, das ist es, wonach Sie suchen.Die anderen Kommentatoren haben Recht, aber zumindest meiner Erfahrung nach steckt beim Aufruf von SaveAs() viel mehr dahinter, als man erwarten würde, wenn man dieselben Objekte (ohne den Interop-Wrapper) in VBA verwendet hätte.

Microsoft.Office.Interop.Excel.Workbook wbk = excelApplication.Workbooks[0];  //or some other way of obtaining this workbook reference, as Jason Z mentioned
wbk.SaveAs(filename, Type.Missing, Type.Missing, Type.Missing,
            Type.Missing, Type.Missing, XlSaveAsAccessMode.xlNoChange, 
            Type.Missing, Type.Missing, Type.Missing, Type.Missing,
            Type.Missing);
wbk.Close();
excelApplication.Quit();

Ich muss all diese Type.Missings lieben.Aber ich denke, sie sind notwendig.

Andere Tipps

Anstatt eine Excel-Anwendung zu verwenden, können Sie das Workbook-Objekt verwenden und die SaveAs()-Methode aufrufen.Dort können Sie den aktualisierten Dateinamen übergeben.

Haben Sie die SaveAs aus dem Arbeitsblatt ausprobiert?

  1. Das Gleiche gilt für die SaveAs
  2. Wann immer ich Interop ausführen muss, erstelle ich eine separate VB.NET-Klassenbibliothek und schreibe die Logik in VB.Es lohnt sich einfach nicht, es in C# zu tun
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top