連載
» 2004年08月03日 10時00分 UPDATE

JavaTips 〜Apache/Jakarta編:POIを使用してJavaからExcel出力を行う

[青木淳夫, 岡雅久,@IT]

 表形式のデータ保存には、CSV形式のテキストファイルを用いるのが一般的です。しかし、用途によっては、Microsoft Excelで作成したような見栄えの良い表形式での出力を求められることがあります。

 そこで、本稿では「POI」と呼ばれるJavaのライブラリを使用して、Excelファイルを出力する方法を紹介します。POIは、ExcelやWordなどの「Microsoft OLE 2複合ドキュメント形式」に準拠したファイルをJavaで扱うためのAPI群です。ここでは、POIの中でExcel出力を行う「HSSF」と呼ばれるコンポーネントを使用する例を紹介します。

POIによって生成されたExcelファイル POIによって生成されたExcelファイル

注:POIの入手先や必要なJARファイルについては、「サーバサイド技術の学び舎 - WINGS」にある「サーバサイド環境構築設定」を参照してください。

 以下は、先ほど示したExcelファイルをJavaから生成するためのプログラムです。

PoiSample.java
package to.msn.wings;

import java.io.FileOutputStream;

import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFCell;

public class PoiSample {
    public static void main(String[] args) {
        try{
            //新規ワークブックを作成する
            HSSFWorkbook wb = new HSSFWorkbook();
            FileOutputStream fileOut 
            = new FileOutputStream("C:\\PoiSampleBook.xls");
            //新規ワークシートを作成する
            HSSFSheet sheet1 = wb.createSheet();
            HSSFSheet sheet2 = wb.createSheet();
            //作成したシート名を変更
            //日本語シート名を指定する場合には
            //エンコーディング設定は必須
            wb.setSheetName(0,"sheet1");    
            wb.setSheetName(1
                ,"シート2",HSSFWorkbook.ENCODING_UTF_16);
            //行オブジェクトの作成(行番号は0スタート)
            HSSFRow row2 = sheet1.createRow(1);
            //セルオブジェクトの作成(セル番号は0スタート)
            //引数はshort型でキャストしなければならない点に注意
            HSSFCell cellB2 = row2.createCell((short)1);
            HSSFCell cellC2 = row2.createCell((short)2);
            //セルに値を設定する
            cellB2.setCellValue("B2");
            //セルに日本語の値を設定する
            //日本語の値を指定する場合には
            //エンコーディング設定は必須
            cellC2.setEncoding(HSSFCell.ENCODING_UTF_16);
            cellC2.setCellValue("C2日本語");
            //作成したワークブックを保存する
            wb.write(fileOut);
            fileOut.close();
            System.out.println(
                "Excelファイルの作成が完了しました!");
        }catch(Exception e){
            e.printStackTrace();
            System.out.println("処理が失敗しました");
        }
    }
}


 Excelのオブジェクト操作には、下記のクラスを使用します。ブック、シート、行、セルから構成されるクラス構造は、Excelの構造を直観的に表しているものなので、分かりやすいでしょう。

POI(HSSF)に含まれる主要なクラス
クラス名 説明
HSSFWorkbook Excelのワークブックを扱うクラス
HSSFSheet ワークシートを扱うクラス
HSSFRow 行を扱うクラス
HSSFCell セルを扱うクラス

 このサンプルプログラムの詳細については、コード内にあるコメントを参考にしてください。ここでは、POIを利用する際の定型的なコードの流れを以下に示しておきます。

  1. 新規ワークブックの作成(HSSFWorkbookクラス)
  2. 新規ワークシートの作成(HSSFWorkbook#createSheetメソッド)
  3. 対象列の取得(HSSFSheet#createRowメソッド)
  4. 対象セルの取得(HSSFRow#createCellメソッド)
  5. セル値の設定(HSSFCell#setCellValueメソッド)
  6. ファイル保存(HSSFWorkbook#writeメソッド)

 これが、POIを利用してExcelファイルを新規作成する場合の基本的な手続きになります。今後紹介する、より複雑なファイル出力例を説明する際の基本となりますので、上記のコードと照らし合わせて、しっかり理解しておいてください。

Profile

WINGSプロジェクト

青木淳夫・岡雅久


Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。