2017-12-25 7 views
0

Ich habe ein Excel-Add-In geschrieben, das beim Drücken einer Taste den Inhalt einiger Zellen ändert. Jetzt wollte ich die Funktionalität hinzufügen, um die Arbeitsmappe in einer neuen Datei zu speichern, nachdem diese Ersetzungen stattfanden.Excel-Arbeitsmappe in VSTO-Addin speichern C#

Hier ist mein Ziel und irgendwie funktioniert das nicht ganz so, wie ich es mir vorgestellt habe.

Dies ist der Code die Datei in meinem ThisAddIn.cs zu speichern:

public static void saveasnewfile() 
     { 
      Globals.ThisAddIn.Application.ActiveWorkbook.SaveCopyAs(@"C:\XXXX.XLS"); 
     } 

Und das ist, wie ich diese Funktion aufrufen (sagen wir, wenn eine Taste gedrückt wird):

//... 
ThisAddIn.saveasnewfile(); 
//... 

Jetzt Wenn ich diese Taste drücke, erhalte ich folgende Fehlermeldung:

Microsoft Excel kann nicht auf die Datei 'C: \ XXXX.XLS' zugreifen. Es gibt verschiedene mögliche Gründe:

• Der Dateiname oder Pfad existiert nicht. • Die Datei wird von einem anderen Programm verwendet. ? Die Arbeitsmappe, die Sie speichern möchten, hat denselben Namen wie eine aktuell geöffnete Arbeitsmappe.

Das scheint mir irgendwie seltsam. Natürlich existiert die Datei nicht, da ich sie erstellen möchte ...

Also was fehlt mir hier?

Ich möchte die Funktionalität hinzufügen, um den Benutzer zu einem Pfad mit einem savefiledialog später aufzufordern. So gibt es einige Tipps, würde auch helfen :)

+0

Sind Sie wirklich versuchen, in die Wurzel von C schreiben :? – rene

+0

Zu Testzwecken ja. –

+0

Versuchen Sie einen Ordner, sagen Sie C: \ Temp oder einen anderen Ordner, den Sie erstellt haben. – rene

Antwort

0

LÖSUNG:

Für alle, die auf die gleiche Sache stolpern könnte, hier ist, wie ich es mit dem SaveFileDialog umgesetzt:

var saveDialog = new SaveFileDialog() //create new instance of savefiledialog 
{ 
    Title = "Save As", //sets title of dialog box 
    Filter = "Excel Worbook (*.xlsx)|*.xlsx", //filter for .xlsx files 
    AddExtension = true, //automatically adds the .xlsx extension 
    CheckPathExists = true //checks if the given path really exists 
} 

if (saveDialog.ShowDialog() == DialogResult.OK) 
{ 
Globals.ThisAddIn.Application.ActiveWorkbook.SaveCopyAs(saveDialog.FileName); 
}