Excel for .NET
OpenXml ファイルのインポートとエクスポート

Excel for .NET は Microsoft Excel 2007 OpenXml ファイルの読み取り/書き込みが行えるようになりました。OpenXml は Microsoft が Office 2007 に導入したオープンな標準形式です。OpenXml は XML をベースにし、BIFF8 などのプロプライエタリなバイナリ形式とは対照的にドキュメントが公開されているため、OpenXml ファイルはアプリケーションによって操作しやすくなっています。OpenXml ファイルは Zip 圧縮を使って圧縮された多数の XML ファイルを格納します。これらは圧縮されているため、OpenXml ファイルは通常、.doc や .xls ファイルなどの従来のドキュメントファイルよりもサイズが大幅に小さくなります。

Excel for .NET は OpenXml ファイル内のデータと書式情報のロードと保存は行いますが、数式のロードと保存は行いません。数式は、現時点で OpenXML 形式によってサポートされていない BIFF 形式で opaque としてコピーされます。数式を含むファイルをロードしてそれらを保存する場合、数式は削除されます。これは、数式を保持する従来の .xls(BIFF8)形式と異なっています。

OpenXml 形式をサポートするために、 C1XLBook の Load および Save メソッドはファイルのロード/保存時に使用するファイル形式の指定に使用される FileFormat パラメータを取るオーバーロードを受け取ります。

ファイル名を指定しない場合は、Excel for .NET はファイル形式をファイル名の拡張子から推測します。つまり、「XLSX」と「ZIP」拡張子のファイルはデフォルトで OpenXml ファイルとしてロードおよび保存されます。他のファイルは BIFF8(.xls)形式としてロードおよび保存されます。

たとえば、次のようになります。

C# コードの書き方

C#
コードのコピー
// ファイル拡張子に依存してロードおよび保存
c1Excel1.Load("somefile.xls"); // biff8ファイルを読み込む
c1Excel1.Save("somefile.xlsx"); //OpenXmlとして保存
c1Excel1.Save("somefile.zip"); //OpenXmlとして保存
// FileFormat を指定してロードおよび保存
c1Excel1.Load("somefile.xls", FileFormat.Biff8);
c1Excel1.Save("somefile.xlsx", FileFormat.OpenXml);

ストリームでのファイルのロード/保存時に形式を指定することもできます。FileFormat を指定しない場合は、Excel for .NET は BIFF8 形式をデフォルトとして使用します。

ここで小さい動作変更が暗黙に含まれていることに注意してください。以下のステートメントを考えます。

C1Excel1.Save("somefile.xlsx");

Excel for .NET の以前のバージョンでは、このステートメントで BIFF8 ファイルが(無効な拡張子で)保存されました。今は、このステートメントで OpenXml ファイルが(有効な拡張子で)保存されます。このようなコードがアプリケーションに含まれている場合、アップグレード時にそれを以下のように変更する必要があります。

C# コードの書き方

C#
コードのコピー
// 無効な拡張子を持つファイルを意図的に保存
C1Excel1.Save("somefile.xlsx", FileFormat.Biff8);

ブックを OpenXml ファイルにエクスポートするには、以下の手順を実行します。

  1. 既存のブックをロードします。

    Visual Basic コードの書き方

    Visual Basic
    コードのコピー

    Dim wb As New C1XLBook()
    wb.Load("C:\test.xlsx")
    'あるいは
    Dim wb As New C1XLBook()
    wb.Load("C:\test.xlsx", C1.C1Excel.FileFormat.OpenXml)

    C# コードの書き方

    C#
    コードのコピー

    C1XLBook wb = new C1XLBook();
    wb.Load(@"C:\test.xlsx");
    // あるいは
    C1XLBook wb = new C1XLBook();
    wb.Load(@"C:\test.xlsx", C1.C1Excel.FileFormat.OpenXml);

  2. ブックを OpenXml 形式ファイルにエクスポートします。 

    Visual Basic コードの書き方

    Visual Basic
    コードのコピー
    Dim wb As New C1XLBook()
    ' 何かコンテンツを追加
    Dim sheet As XLSheet = wb.Sheets(0)
    Dim i As Integer
    For i = 0 To 9
            sheet(i,0).Value = i + 1
    Next i
    ' OpenXml 形式ファイルにエクスポート 
    wb.Save("C:\test.xlsx")
    ' あるいは 
    ' OpenXml 形式ファイルにエクスポート 
    wb.Save("C:\test.xlsx", C1.C1Excel.FileFormat.OpenXml)
    

    C# コードの書き方

    C#
    コードのコピー
    C1XLBook wb = new C1XLBook();
    // 何かコンテンツを追加
    XLSheet sheet = wb.Sheets[0];
    for (int i = 0; i <= 9; i++)
            {
            sheet[i,0].Value = i + 1;
            }
    // OpenXml 形式ファイルにエクスポート
    wb.Save(@"C:\test.xlsx");
    // あるいは小計を作成する
    // OpenXml 形式ファイルにエクスポート
    wb.Save(@"C:\test.xlsx", C1.C1Excel.FileFormat.OpenXml);