Excel 97-2003 ブック (.xls) をプログラムで扱う – 準備


◆Excel 97-2003 ブック (.xls) をプログラムから扱う

Excel 97-2003 ブック (.xls) の BIFF8 バイナリ形式をプログラムから扱うには、いくつかの方法があります。

  • オートメーションで Excel を起動して操作する
  • フリーのコンポーネントを使用する
  • 市販のコンポーネントを使用する

オートメーションで Excel を起動して操作する方法については、Excel そのものを動かすため、ファイルを扱うという点に関しては最も確実な方法となります。しかしながら、実行環境に Excel がインストールされている必要がある、サーバーサイドでの使用が推奨されていない、動作速度が遅い等、さまざまな制約があるため、多様化するシステムで使用するにはあまり適していません。
Office のサーバーサイド オートメーションについて

Excel 97-2003 ブック (.xls) を扱うフリーのコンポーネントとして、NPOI があります。NPOI は Java の Apache POI を .NET 向けに作成したライブラリで、CodePlex のサイトからダウンロードすることができます。導入コストがかからないため、手軽に使用することができますが、問題が発生した場合等は解決するためのスキルが必要になります。

市販のコンポーネントとしては、グレープシティさんの「PowerTools ComponentOne Studio 2012J」に含まれる「PowerTools XLS for .NET」や、アドバンスソフトウェアの「ExcelCreator」があります。これらのコンポーネントは体験版が公開されているため、機能や要件の確認を行うことができます。問題が発生した場合はメーカーに問い合わせることもできます。


何回かにわたりその方法を紹介したいと思いますので、今回は C# のコンソールアプリケーションプロジェクトで NPOI と ExcelCreator を使用するための準備とブックを新規に作成する例について紹介します。


◆検証を行う環境

  • Windows 8 x64
  • Visual Studio 2012 Premium


◆NPOI を使用する

NPOI を使用するには、CodePlex のサイトからバイナリをダウンロードし、解凍したフォルダを任意の場所にコピーします。

.NET Framework 2.0 用のアセンブリと 4 用のアセンブリが用意されているので、コンソールアプリケーションのプロジェクトを作成し、適切なアセンブリを参照設定に追加すれば使用できるようになります。

ブックを新規に作成するコード(NPOI)

using System.IO;

namespace NPOIConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            var workbook = new NPOI.HSSF.UserModel.HSSFWorkbook();
            workbook.CreateSheet("Sheet1");
            using (var fileStream = new FileStream("NPOICreate.xls", FileMode.OpenOrCreate, FileAccess.Write))
                workbook.Write(fileStream);
        }
    }
}

作成したブックの内容を確認すると、Excel で作成したブックと比べてフォント情報や書式情報が異なることが分かります。内容から推測すると英語版の Excel に合わせた仕様となっているようです。

フォント情報(レコード ID:0×0031) – Arial がデフォルト

[ID:0x0031(Length:21)]
C8 00 00 00 FF 7F 90 01 00 00 00 00 00 00 05 00 | ネ............... |
41 72 69 61 6C                                  | Arial            |
[ID:0x0031(Length:21)]
C8 00 00 00 FF 7F 90 01 00 00 00 00 00 00 05 00 | ネ............... |
41 72 69 61 6C                                  | Arial            |
[ID:0x0031(Length:21)]
C8 00 00 00 FF 7F 90 01 00 00 00 00 00 00 05 00 | ネ............... |
41 72 69 61 6C                                  | Arial            |
[ID:0x0031(Length:21)]
C8 00 00 00 FF 7F 90 01 00 00 00 00 00 00 05 00 | ネ............... |
41 72 69 61 6C                                  | Arial            |

書式情報(レコード ID:0x041e) – 7 レコード

[ID:0x041e(Length:26)]
05 00 15 00 00 22 24 22 23 2C 23 23 30 5F 29 3B | ....."$"#,##0_); |
28 22 24 22 23 2C 23 23 30 29                   | ("$"#,##0)       |
[ID:0x041e(Length:31)]
06 00 1A 00 00 22 24 22 23 2C 23 23 30 5F 29 3B | ....."$"#,##0_); |
5B 52 65 64 5D 28 22 24 22 23 2C 23 23 30 29    | [Red]("$"#,##0)  |
[ID:0x041e(Length:32)]
07 00 1B 00 00 22 24 22 23 2C 23 23 30 2E 30 30 | ....."$"#,##0.00 |
5F 29 3B 28 22 24 22 23 2C 23 23 30 2E 30 30 29 | _);("$"#,##0.00) |
[ID:0x041e(Length:37)]
08 00 20 00 00 22 24 22 23 2C 23 23 30 2E 30 30 | .. .."$"#,##0.00 |
5F 29 3B 5B 52 65 64 5D 28 22 24 22 23 2C 23 23 | _);[Red]("$"#,## |
30 2E 30 30 29                                  | 0.00)            |
[ID:0x041e(Length:44)]
2A 00 27 00 00 5F 28 2A 20 23 2C 23 23 30 5F 29 | *.'.._(* #,##0_) |
3B 5F 28 2A 20 28 23 2C 23 23 30 29 3B 5F 28 2A | ;_(* (#,##0);_(* |
20 22 2D 22 5F 29 3B 5F 28 40 5F 29             |  "-"_);_(@_)     |
[ID:0x041e(Length:53)]
29 00 30 00 00 5F 28 22 24 22 2A 20 23 2C 23 23 | ).0.._("$"* #,## |
30 5F 29 3B 5F 28 22 24 22 2A 20 28 23 2C 23 23 | 0_);_("$"* (#,## |
30 29 3B 5F 28 22 24 22 2A 20 22 2D 22 5F 29 3B | 0);_("$"* "-"_); |
5F 28 40 5F 29                                  | _(@_)            |
[ID:0x041e(Length:52)]
2C 00 2F 00 00 5F 28 2A 20 23 2C 23 23 30 2E 30 | ,./.._(* #,##0.0 |
30 5F 29 3B 5F 28 2A 20 28 23 2C 23 23 30 2E 30 | 0_);_(* (#,##0.0 |
30 29 3B 5F 28 2A 20 22 2D 22 3F 3F 5F 29 3B 5F | 0);_(* "-"??_);_ |
28 40 5F 29                                     | (@_)             |
[ID:0x041e(Length:61)]
2B 00 38 00 00 5F 28 22 24 22 2A 20 23 2C 23 23 | +.8.._("$"* #,## |
30 2E 30 30 5F 29 3B 5F 28 22 24 22 2A 20 28 23 | 0.00_);_("$"* (# |
2C 23 23 30 2E 30 30 29 3B 5F 28 22 24 22 2A 20 | ,##0.00);_("$"*  |
22 2D 22 3F 3F 5F 29 3B 5F 28 40 5F 29          | "-"??_);_(@_)    |

より詳細な内容については次回以降に書きたいと思います。


◆ExcelCreator を使用する

ExcelCreator を使用するには、アドバンスソフトウェアのサイトから ExcelCreator の体験版をダウンロードします。ExcelCreator は扱うファイルの形式や開発環境によっていくつかのバージョンが存在しますが、.NET 環境で Excel 97-2003 ブック (.xls) を扱うには、ExcelCreator 5.0 for .NET をダウンロードします。

ダウンロードしたファイルを実行すると自動でセットアッププログラムが起動するので、メッセージに従いインストールを進めます。こちらも .NET Framework 2.0 用のアセンブリと 4 用のアセンブリが用意されているので、コンソールアプリケーションのプロジェクトを作成し、適切なアセンブリを参照設定に追加すれば使用できるようになります。

ブックを新規に作成するコード(ExcelCreator 5.0 for .NET)

namespace EC5ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            var xlsCreator = new ExcelCreator.XlsCreator();
            xlsCreator.CreateBook("EC5Create.xls", 1, ExcelCreator.xlVersion.ver2003);
            xlsCreator.CloseBook(true);
        }
    }
}

作成したブックの内容を確認すると、Excel で作成したブックと比べてほぼ同じ内容になっています。

フォント情報(レコード ID:0×0031) – MS Pゴシックがデフォルト

[ID:0x0031(Length:32)]
DC 00 00 00 FF 7F 90 01 00 00 00 03 80 00 08 01 | ワ............... |
2D FF 33 FF 20 00 30 FF B4 30 B7 30 C3 30 AF 30 | -.3. .0.エ0キ0テ0ッ0 |
[ID:0x0031(Length:32)]
DC 00 00 00 FF 7F 90 01 00 00 00 03 80 00 08 01 | ワ............... |
2D FF 33 FF 20 00 30 FF B4 30 B7 30 C3 30 AF 30 | -.3. .0.エ0キ0テ0ッ0 |
[ID:0x0031(Length:32)]
DC 00 00 00 FF 7F 90 01 00 00 00 03 80 00 08 01 | ワ............... |
2D FF 33 FF 20 00 30 FF B4 30 B7 30 C3 30 AF 30 | -.3. .0.エ0キ0テ0ッ0 |
[ID:0x0031(Length:32)]
DC 00 00 00 FF 7F 90 01 00 00 00 03 80 00 08 01 | ワ............... |
2D FF 33 FF 20 00 30 FF B4 30 B7 30 C3 30 AF 30 | -.3. .0.エ0キ0テ0ッ0 |
[ID:0x0031(Length:32)]
78 00 00 00 FF 7F 90 01 00 00 00 03 80 00 08 01 | x............... |
2D FF 33 FF 20 00 30 FF B4 30 B7 30 C3 30 AF 30 | -.3. .0.エ0キ0テ0ッ0 |

書式情報(レコード ID:0x041e) – 11 レコード(Excel と同じ)

[ID:0x041e(Length:24)]
05 00 13 00 00 22 5C 22 23 2C 23 23 30 3B 22 5C | ....."\"#,##0;"\ |
22 5C 2D 23 2C 23 23 30                         | "\-#,##0         |
[ID:0x041e(Length:29)]
06 00 18 00 00 22 5C 22 23 2C 23 23 30 3B 5B 52 | ....."\"#,##0;[R |
65 64 5D 22 5C 22 5C 2D 23 2C 23 23 30          | ed]"\"\-#,##0    |
[ID:0x041e(Length:30)]
07 00 19 00 00 22 5C 22 23 2C 23 23 30 2E 30 30 | ....."\"#,##0.00 |
3B 22 5C 22 5C 2D 23 2C 23 23 30 2E 30 30       | ;"\"\-#,##0.00   |
[ID:0x041e(Length:35)]
08 00 1E 00 00 22 5C 22 23 2C 23 23 30 2E 30 30 | ....."\"#,##0.00 |
3B 5B 52 65 64 5D 22 5C 22 5C 2D 23 2C 23 23 30 | ;[Red]"\"\-#,##0 |
2E 30 30                                        | .00              |
[ID:0x041e(Length:55)]
2A 00 32 00 00 5F 20 22 5C 22 2A 20 23 2C 23 23 | *.2.._ "\"* #,## |
30 5F 20 3B 5F 20 22 5C 22 2A 20 5C 2D 23 2C 23 | 0_ ;_ "\"* \-#,# |
23 30 5F 20 3B 5F 20 22 5C 22 2A 20 22 2D 22 5F | #0_ ;_ "\"* "-"_ |
20 3B 5F 20 40 5F 20                            |  ;_ @_           |
[ID:0x041e(Length:46)]
29 00 29 00 00 5F 20 2A 20 23 2C 23 23 30 5F 20 | ).).._ * #,##0_  |
3B 5F 20 2A 20 5C 2D 23 2C 23 23 30 5F 20 3B 5F | ;_ * \-#,##0_ ;_ |
20 2A 20 22 2D 22 5F 20 3B 5F 20 40 5F 20       |  * "-"_ ;_ @_    |
[ID:0x041e(Length:63)]
2C 00 3A 00 00 5F 20 22 5C 22 2A 20 23 2C 23 23 | ,.:.._ "\"* #,## |
30 2E 30 30 5F 20 3B 5F 20 22 5C 22 2A 20 5C 2D | 0.00_ ;_ "\"* \- |
23 2C 23 23 30 2E 30 30 5F 20 3B 5F 20 22 5C 22 | #,##0.00_ ;_ "\" |
2A 20 22 2D 22 3F 3F 5F 20 3B 5F 20 40 5F 20    | * "-"??_ ;_ @_   |
[ID:0x041e(Length:54)]
2B 00 31 00 00 5F 20 2A 20 23 2C 23 23 30 2E 30 | +.1.._ * #,##0.0 |
30 5F 20 3B 5F 20 2A 20 5C 2D 23 2C 23 23 30 2E | 0_ ;_ * \-#,##0. |
30 30 5F 20 3B 5F 20 2A 20 22 2D 22 3F 3F 5F 20 | 00_ ;_ * "-"??_  |
3B 5F 20 40 5F 20                               | ;_ @_            |
[ID:0x041e(Length:26)]
17 00 15 00 00 5C 24 23 2C 23 23 30 5F 29 3B 5C | .....\$#,##0_);\ |
28 5C 24 23 2C 23 23 30 5C 29                   | (\$#,##0\)       |
[ID:0x041e(Length:31)]
18 00 1A 00 00 5C 24 23 2C 23 23 30 5F 29 3B 5B | .....\$#,##0_);[ |
52 65 64 5D 5C 28 5C 24 23 2C 23 23 30 5C 29    | Red]\(\$#,##0\)  |
[ID:0x041e(Length:32)]
19 00 1B 00 00 5C 24 23 2C 23 23 30 2E 30 30 5F | .....\$#,##0.00_ |
29 3B 5C 28 5C 24 23 2C 23 23 30 2E 30 30 5C 29 | );\(\$#,##0.00\) |
[ID:0x041e(Length:37)]
1A 00 20 00 00 5C 24 23 2C 23 23 30 2E 30 30 5F | .. ..\$#,##0.00_ |
29 3B 5B 52 65 64 5D 5C 28 5C 24 23 2C 23 23 30 | );[Red]\(\$#,##0 |
2E 30 30 5C 29                                  | .00\)            |

こちらもより詳細な内容については次回以降に書きたいと思います。


◆まとめ

NPOI と ExcelCreator を使ってプログラムから Excel 97-2003 ブックを扱うための準備が整いましたので、次回からは NPOI と ExcelCreator を使って、実際のプログラムから Excel 97-2003 ブックをより細かく扱う方法を紹介していきたいと思います。

You can leave a response, or trackback from your own site.

Leave a Reply