Javaを使って普段の仕事をラクにするツールを作っていくこの連載。第3回は,おなじみの表計算ソフトExcelをJavaからどう扱うかを説明します。簡単な家計簿ツールの作成を通じて,JavaによるExcel操作の基礎を習得していくことにしましょう。

こちらからサンプルプログラムをダウンロードできます。

 皆さん,こんにちは! kikainekoです。この連載では,日々の定型的な業務をJavaで自動化してラクする方法を紹介しています。今回は,皆さんが仕事でもっともよく使用していると思われる,ExcelファイルをJavaから操作してみましょう!

 「ExcelにはVBA(Visual Basic for Applications:ExcelやWordなどMicrosoft Officeのマクロ言語)があるのに,わざわざJavaから操作する必要があるの?」と思われるかもしれません。確かに,Excelへのアクセスのしやすさだけを考えると,VBAのほうが簡単でしょう。とりわけ,VBAが持つマクロの記録・再生機能は強力です。

 それでも筆者は,Excelファイルにアクセスする場合,VBAよりもJavaのほうが便利だと考えています。なぜでしょうか。「Excelを操作する」という処理の内容を考えてみましょう。多くの場合,それは「Excelファイルから値を取り出し,加工して集計する」ことを意味します。

 VBAは,「Excelファイルから値を取り出す」という前半の処理は得意です。ところが,「加工して集計する」という後半の処理が非常に苦手です。実は,処理が難しいのは後半の加工・集計処理だったりします。このため,Excelファイルへのアクセスが少々難しいとしても,結果的に後半の処理をラクにできるJavaを利用することになるわけです。VBAでは,複数のExcelファイルを同時に処理するのも少し苦手ですしね。

 Excelの外部からExcelを操作できるようになると,作業のかなりの部分を軽減できるという利点もあります。例えば,Excelからソースコードを自動生成する,Excelからデータを取得・加工して別のExcelファイルに転記するなど,様々な場面で使用できます。筆者もこういった技術のおかげで,かなりラクをさせてもらっています。皆さんも,さらにラクできる技を身につけてしまいましょう!

Jakarta POIを使ってExcelを操作する

 JavaからExcelを操作する方法は,いくつかあります。この連載では,手軽に(つまりタダで)使えて,もっとも普及している「Jakarta POI(ポイと読みます)」を利用して,ポイポイっとExcelを操作できるようにしていきます(POIのインストール方法は,本文末のカコミ記事POIをインストールしよう」を参照)。

 POIは,ExcelファイルやWordファイルといった,Microsoft Office形式*1のファイルをJavaで扱うためのライブラリです。その機能は非常に多岐にわたっており,この誌面ではとてもすべてを紹介しきれません。ここでは,POIを使ってExcelをどのように操作するかに話を絞って,一緒に見ていくことにしましょう!

 作成するサンプルは,お手軽な「家計簿ツール」です。Excelファイルに書かれた「光熱費=20000」のようなデータを加工して,家計簿の出費の合計を計算します(図1)。ついでに,その計算結果を同じExcelファイルに書き込むことにします。

図1●作成する家計簿ツールのイメージ
図1●作成する家計簿ツールのイメージ

 では,さっそくツールの作成に取り掛かりましょう,と言いたいところですが,いきなり始めても訳が分からなくなってしまうでしょう。まずは,ツールを作るうえで押さえるべきポイントを説明します。すなわち,どうやってJavaからExcelを操作するのか。言い換えると,「POIをどう使えばよいか」ですね。

 POIを使ってExcelファイルを操作するためには,以下の三つを知っておく必要があります。

(1)HSSFクラス群の構成
(2)Excelの基本的な操作方法
(3)有効範囲

 HSSF(Horrible Spread Sheet Format)とは,POIが提供する,Excelファイルを操作するためのクラス群のことです。あとで詳しく解説します。文章だけで説明してもピンと来ないかもしれませんので,サンプル・コードのリスト1を使いながら解説を進めます。

リスト1●Excelファイルから値を取り出して表示する
リスト1●Excelファイルから値を取り出して表示する
[画像のクリックで拡大表示]

 リスト1は,Excelファイルから値を取り出して表示するサンプルです。基本的な処理の流れについては,吹き出しのコメントを参照してください。サンプルなので例外処理などは省略しています。

 このサンプルを実行する前に,「B3」のセルに「test」という文字を記入した「sample.xls」というファイルを用意してください。行やセルは,すべて最初を「0番目」と数える点に注意しましょう。つまりリスト1は,行としては「上から2番目(すなわち3行目),セルとしては「左から1番目(すなわち二つ目)」の「B3」セルの値を表示するサンプルになっています。少しややこしいかもしれませんね。