2013-03-21 14 views
6

Ich arbeite an einer Konsolenanwendung, die Xlsx-Datei in XLS-Datei konvertieren wird. Ich will es nicht von xlsx in xls umbenennen, weil es in Excel 2007 geöffnet wird, aber es wird als beschädigte Datei in Excel 2003 angezeigt. Auf der Suche nach einer Möglichkeit, das Dokument zu laden und dann wird es als XLS-Format gespeichert .C# Excel 2007 (xlsx) Datei in Excel 2003 (xls) Datei konvertieren

Mein aktueller Code benennt einfach die xlsx zu xls

string fileName = @"C:\Users\L-3\Desktop\my.xlsx"; 
string svfileName = @"C:\Users\L-3\Desktop\ssc\my1.xls"; 
object oMissing = Type.Missing; 
var app = new Microsoft.Office.Interop.Excel.Application(); 
var wb = app.Workbooks.Open(fileName, oMissing, oMissing, 
       oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing); 
wb.SaveAs(svfileName, XlFileFormat.xlOpenXMLTemplate, Type.Missing, Type.Missing, Type.Missing, Type.Missing, XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); 
app.Quit(); 

Antwort

1

Versuchen Sie mit, um mit XlFileFormat.xlExcel9795 zu speichern. Sie können auch verwenden XlFileFormat.xlWorkbookNormal

+1

Dies speichert die Datei als Excel 95-97 Format, wenn Sie irgendwelche Funktionen verwenden, die> = 2003 eingeführt wurden, funktionieren sie nicht! – JMK

+0

Das löst eine Ausnahme aus: "Ausnahme von HRESULT: 0x800A03EC" – m2pathan

4

Ihr Enum falsch ist, statt XlFileFormat.xlOpenXMLTemplate Sie XlFileFormat.xlExcel8 wollen, so würde der Code wie so sein:

string fileName = @"C:\Users\L-3\Desktop\my.xlsx"; 
string svfileName = @"C:\Users\L-3\Desktop\ssc\my1.xls"; 
object oMissing = Type.Missing; 
var app = new Microsoft.Office.Interop.Excel.Application(); 
var wb = app.Workbooks.Open(fileName, oMissing, oMissing, 
       oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing); 
wb.SaveAs(svfileName, XlFileFormat.xlExcel8, Type.Missing, Type.Missing, Type.Missing, Type.Missing, XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); 
app.Quit(); 

Weitere Informationen here.

+0

Das löst eine Ausnahme aus: 'Ausnahme von HRESULT: 0x800A03EC' COMEXception wurde nicht behandelt. Funktioniert es an deinem Ende? –

+0

Ich denke, das xlExcel8 schafft das Problem. –

+1

Ich habe mir gerade die Zeit genommen, den obigen Code zu testen, er funktioniert perfekt auf meinem Computer. – JMK

0

Ich habe den folgenden Ausschnitt aus here gefunden:

// Create new XLSX file. 
var xlsxFile = new ExcelFile(); 

// Load data from XLSX file. 
xlsxFile.LoadXlsx(fileName + ".xls", XlsxOptions.PreserveMakeCopy); 

// Save XLSX file to XLS file. 
xlsxFile.SaveXls(fileName + ".xls"); 

Es verwendet this component.

+0

Das wird Abhängigkeit in meiner Anwendung hinzufügen. o.O –

0

Ich denke, das hat die Antwort für Sie suchen:

What is the correct `XlFileFormat` enumeration for Excel 97-2003

Sie verwenden Dateiformat xlOpenXMLTemplate. Verwenden Sie stattdessen xlExcel8? Das sollte das Dateiformat für 97-2003 Workbooks sein.

+0

Es wurde eine COM-Ausnahme ausgelöst. Können Sie eine Konsole erstellen und erneut überprüfen? –

+0

Ich bin leider nicht dazu in der Lage. Ich merke @JMK sagt, das funktioniert. Ich bin sicher, dass das Dateiformat, das Sie zuvor hatten, 'xlOpenXMLTemplate' falsch ist. Die 'SaveAs'-Methode sollte die richtige Dateiformataufzählung für eine Excel 97-2003-Arbeitsmappe (.xls) verwenden, die xlExcel8 lauten sollte. –

Verwandte Themen