2009-04-30 36 views
2

ExcelPackageは、Excel Interop APIよりも優れたライブラリであり、プログラムでExcelシートを作成するのに優れていますが、.xlsx形式で生成されています。ファイルを見る人のほとんどはオフィス2003のみがインストールされているので、私はC#コードで最終結果を.xlsファイルに変換する必要があります。xlsxファイルを2003 xlsファイルにプログラムでC#で変換する方法は?

C#コードでこれを行う方法はありますか?

** 私はSaveAsメソッドを使用しようとしていますが、機能しません。何もしないか、エラー0x800A03ECを返します。

+0

「xlsx」ではなく「excel-2007」タグを使用してください。あなたの質問にタグを付ける際の提案のプロンプトを見てください:名前の後に10より小さい数字のタグが間違っている可能性があります。 –

答えて

1

Microsoft.Office.Interop.Excelを使用できます。変換を実行しようとしているマシンにExcelをインストールする必要があります。 COMタブから参照を追加し、Microsoft Excel 12.0 Object Libraryコンポーネントを使用することができます。

基本的には、Workbook.Open()を使用して既存のワークブックを開き、新しいワークシートを作成して既存のデータをコピーします。 Workbook.SaveAs()メソッドを使用すると、2番目のパラメータでファイル形式を設定できます。

+1

これは、これを実行するマシンにExcelをインストールする必要があります。ウェブサーバー。簡単なソリューションですが、エンタープライズ環境では実用的ではありません。 –

5

これは一般的な答えではないと思われますが、ファイルを.xlsxから.xlsに変換することが望ましいとは思わない(私はそれが必要ではないと示唆していたが、残念なことに、それはあまりにも一般化されている)。

"Microsoft Office互換パック"は、Office XPとOffice 2003に新しい形式のサポートを無料でダウンロードして追加することができます。つまり、少なくとも一般的な例では、ユーザーにシステムの導入を促す(基本的にあなた、そしておそらくあなたのユーザーに、多くの痛みを引き起こすことになる)interopに対処しなければならないという点で、同様に私はOpen Office 3の新しいフォーマットのサポートがあると信じています。

人々は自分のシステムにこの機能を追加することはできませんが、 Office 2007を使用しているユーザーと古いバージョンを使用しているユーザーの間の摩擦を軽減するため、人々の生活を楽にします。

+0

はい、私はこれまで互換性パックのため、私は以前には知りませんでしたので、今転載を断念しました!ありがとう! –

0

このコードを試してみてください。

 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

あなたのコードはOKですが、ランタイムエラーが発生します。多分私はIIS上で実行しているからです(私はASP.NETアプリケーションを持っています)。行番号4. OSが動作しているOSがWinServ 2008 64bitである – chester89

+0

Office PIAがサーバーにインストールされていますか? http://www.microsoft.com/downloads/details.aspx?familyid=3c9a983a-ac14-4125-8ba0-d36d67e0f4ad&displaylang=en – foson

0

ここでは、IBMのiSeriesと私のプロジェクトからコードの一部です。 ExcelファイルをExcel 2003に変換します:

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;  
} 
関連する問題