Entwickler-Ecke

Sonstiges (.NET) - [Office-Technologien - Excel] Workbook.SaveAs Methode


Doltsche - Di 09.02.10 10:39
Titel: [Office-Technologien - Excel] Workbook.SaveAs Methode
Hallo zusammen

Ich versuche über C# ein Exceldokument abzuspeichern mit der Methode SaveAs:


C#-Quelltext
1:
2:
workbook.SaveAs(@"C:\CSharp\csharpExcel.xls", Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, falsefalse,
Excel.XlSaveAsAccessMode.xlNoChange, misValue, misValue, misValue, misValue, misValue);


Die Parameter habe ich anschliessend noch mit dem Beitrag auf MSDN verglichen. Die Werte stimmen alle überein, dennnoch kommt die Fehlermeldung:


Quelltext
1:
2:
3:
An unhandled exception of type 'System.Runtime.InteropServices.COMException' occurred in WriteToExcelTest.exe

Additional information: Ausnahme von HRESULT: 0x800A03EC


Da diese Fehlermeldung viele verschiedene Ursachen haben kann wurde ich auch über Google auf die Schnelle nicht fündig.

LG Samuel


ene - Di 09.02.10 11:26

Moin,

Irgendwelche Probleme scheint man damit immer zu haben. Versuche mal einfach Excel zu schließen:


C#-Quelltext
1:
Excel.wbk.Close(true@"C:\CSharp\csharpExcel.xls", System.Reflection.Missing.Value);                    


Ansonsten weiß ich nicht, ob dein Workbook richtig refenziert ist und anscheinend soll auch diese Version funktionieren:


C#-Quelltext
1:
workbook.SaveAs(@"C:\CSharp\csharpExcel.xls", SpreadsheetGear.FileFormat.XLS97);                    


Sonst müsste ich erstmal selber wieder schauen :(


Greenberet - Di 09.02.10 12:30

Hier ein Beispiel wie ich mein Excel sheet speicher und schließe:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
Application app = new ApplicationClass();
Workbook wb;
Worksheet ws;
wb = app.Workbooks.Add(Type.Missing);
ws = (Worksheet)wb.Worksheets.Add(Type.Missing, Type.Missing, Type.Missing, Type.Missing);
Range range = ws.get_Range("A2", Type.Missing);


//... PROCESSING DATA


//without these marshal/null/GC.Collect() calls an Exce.exe process will stay open
Marshal.ReleaseComObject(range);
Marshal.ReleaseComObject(ws);
Marshal.ReleaseComObject(wb);
ws = null;
wb = null;
range = null;
app.Quit();
Marshal.ReleaseComObject(app);
app = null;
GC.Collect();