2009-04-30 4 views
2

Ich habe gefunden ExcelPackage, eine bessere Bibliothek als Excel Interop API zu erstellen und zu halten programmatisch Excel-Blätter, aber sie sind in .xlsx generiert. Die meisten Leute, die die Dateien sehen werden, haben nur Office 2003 installiert, also muss ich in meinem C# -Code das Endergebnis in eine .xls-Datei konvertieren.Wie Xlsx-Dateien in 2003 xls-Dateien programmgesteuert in C# konvertieren?

Kennen Sie einen Weg in C# Code?

** UPDATE Ich versuche, SaveAs-Methode zu verwenden, aber es funktioniert nicht, es tut nichts, oder den Fehler 0x800A03EC zurückgeben.

+0

Verwenden Sie bitte das "Excel-2007" -Tag statt "xlsx". Beobachten Sie die Vorschläge, wenn Sie Ihre Fragen markieren: Ein Tag mit einer Zahl von weniger als 10 nach dem Namen ist wahrscheinlich falsch. –

Antwort

1

Sie können versuchen, Microsoft.Office.Interop.Excel zu verwenden. Sie müssen Excel auf dem Computer installieren, der versucht, die Konvertierung durchzuführen. Sie können den Verweis auf der Registerkarte COM hinzufügen und die Microsoft Excel 12.0-Objektbibliothekskomponente verwenden.

Grundsätzlich öffnen Sie die vorhandene Arbeitsmappe mithilfe von Workbook.Open(), erstellen ein neues Arbeitsblatt und kopieren die vorhandenen Daten. Sie können dann die Methode Workbook.SaveAs() verwenden, damit Sie das Dateiformat im 2. Parameter einstellen können.

+1

Dies erfordert jedoch, dass Sie Excel auf dem Computer installiert haben, auf dem Sie dies ausführen - dies ist bei einem z. Webserver. Eine einfache Lösung - aber in einer Unternehmensumgebung nicht wirklich umsetzbar. –

5

Ich vermute, dass dies keine populäre Antwort sein wird, aber ich glaube nicht, dass es wünschenswert ist, die Dateien zu .xls von .xlsx zu konvertieren (ich wollte vorschlagen, dass es nicht notwendig war, aber leider , das ist eine Verallgemeinerung zu weit). Das "Microsoft Office Compatibility Pack" kann kostenlos heruntergeladen werden und bietet Unterstützung für die neuen Formate für Office XP und Office 2003 - viel besser also, zumindest im allgemeinen Fall, um Ihre Benutzer dazu zu bringen, ihre Systeme hoch zu bringen Spezifikation, als sich selbst in der Auseinandersetzung mit Büro Interop (die im Grunde wird Sie, und möglicherweise Ihre Benutzer, eine Menge Schmerzen) zu stören. Ebenso glaube ich, dass es Unterstützung für die neuen Formate in Open Office 3 gibt.

Ich schätze, dass es Situationen gibt, in denen Menschen diese Fähigkeit nicht zu ihrem System hinzufügen können, aber die Werkzeuge wie oben hinzugefügt werden das Leben von Menschen erleichtern, da es die Reibung zwischen denen, die Office 2007 verwenden, und denen, die ältere Versionen verwenden, verringert.

+0

Ja, ich habe die Konvertierung jetzt aufgegeben, wegen dieses Kompatibilitätspakets, das ich vorher nicht kannte, danke! –

0

Versuchen Sie diesen Code:

 try 
     { 
      Microsoft.Office.Interop.Word.ApplicationClass oWord = new ApplicationClass(); 
      object oMissing = Type.Missing; 
      object fileName = @"c:\test.docx"; 
      Document oDoc = oWord.Application.Documents.Open(ref fileName, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing); 
      object fileName2 = @"c:\test2.doc"; 

      object fileFormat = WdSaveFormat.wdFormatDocument97; 
      oDoc.SaveAs(ref fileName2, ref fileFormat, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing); 

      oDoc.Close(ref oMissing, ref oMissing, ref oMissing); 
      oWord = null; 
      Console.WriteLine("Done"); 

     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.ToString()); 
     } 
     Console.Read(); 
+0

Ihr Code kompiliert OK, aber es verursacht Laufzeitfehler. Vielleicht liegt es daran, dass ich es auf dem IIS (ich habe ASP.NET-Anwendung) ausgeführt habe. Zeilennummer 4. OS mein Server läuft ist WinServ 2008 64bit – chester89

+0

Haben Sie Office PIAs auf dem Server installiert? http://www.microsoft.com/downloads/details.aspx?familyid=3c9a983a-ac14-4125-8ba0-d36d67e0f4ad&displaylang=en – foson

0

hier ein Stück Code von meinem Projekt mit IBM iSeries ist. Es wird jede Excel-Datei in Excel 2003 konvertieren:

string MOVE_DOWNLOADED(string FILENAME) 
{ 
    string Path = FILENAME; 
    Microsoft.Office.Interop.Excel.ApplicationClass app = new Microsoft.Office.Interop.Excel.ApplicationClass();   
    Microsoft.Office.Interop.Excel.Workbook workBook = app.Workbooks.Open(Path, 
    0, 
    true, 
    5, 
    "", 
    "", 
    true, 
    Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, 
    "\t", 
    false, 
    false, 
    0, 
    true, 
    1, 
    0); 

    string retval = System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\" + "_tmp_" + ".xlsx"; 

    try 
    { 
    workBook.SaveAs(retval, 
     Microsoft.Office.Interop.Excel.XlFileFormat.xlExcel9795, 
     null, 
     null, 
     false, 
     false, 
     Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlShared, 
     false, 
     false, 
     null, 
     null, 
     null); 
    } 
    catch (Exception E) 
    { 
    MessageBox.Show(E.Message); 
    } 

    workBook.Close(null, null, null); 
    System.Runtime.InteropServices.Marshal.ReleaseComObject(workBook); 
    workBook = null; 
    GC.Collect(); // force final cleanup! 

    return retval;  
} 
Verwandte Themen