Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

「Usermodel API」を利用したExcelファイルの基本操作

最新POIでOffice Open XML形式のExcelファイルを操作 第2回

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2010/03/01 14:00

 JavaからMicrosoftのドキュメントを操作するためのAPI「POI」の最新版では、Office 2007形式のファイルも扱えるようになりました。本稿では、POIのAPI「Usermodel API」を使用して、ワークブック、ワークシート、行、セルに関連する基本操作を解説します。

目次

はじめに

 POIはJavaからMicrosoftのドキュメントを操作するためのAPIで、2007年6月からApache Software Foundationのトップレベルプロジェクトに格上げされました。オープンソースとして提供されているので誰でも無償で利用することができます。

 なぜ初期のリリース後、7年以上も経過し、多くの情報が存在するPOIを今回あらためて取り上げることにしたかと言うと、2009年9月リリースのVersion 3.5でOffice Open XML形式(以降、OOXML形式)への対応という大きな変更が加わったからです。

 分かりやすくいうと2007形式のExcel(xlsx)やWord(docx)のファイルも扱えるようになったということです。

 本連載では、POIの中からExcelを操作するコンポーネント(HSSF/XSSF)に対象を絞り、下記の予定で紹介していきます。

  • 準備編:POIの概要と環境構築
  • 基本編:Usermodel APIを利用してExcelファイルを操作(今回)
  • 応用編:帳票とグラフ作りに挑戦
  • 番外編:OSSのフレームワークを利用してExcelレポートを簡単作成

 また、本連載はOOXML形式のExcelファイルを基本として進めますが、Excel 2003以前のMicrosoft OLE2複合ドキュメント形式(以降OLE2形式)への対応方法についても随時紹介していきます。

対象読者

  • JavaでExcelファイルを操作したい方

Usermodel API

 前回はPOIを利用するための環境構築を行い、サンプルプログラムを実行して、拡張子が「xlsx」であるOffice Open XML形式(以降OOXML形式)のExcelファイルを生成してみました。ソースの内容について説明はしませんでしたが、POI3.5から導入された「org.apache.poi.xssf」パッケージ(以降XSSFパッケージ)のAPIが利用されていました。

 POIのAPIは、用途によって「Eventmodel API」と「Usermodel API」が用意されています。Excelファイルを読込むだけであり、メモリ消費量を抑える必要がある環境ではEventmodel APIが適しています。一方、読込に加えて、Excelファイルを作成したり加工したりする場合にはUsermodel APIを利用することになります。メモリの消費量は多くなりますが、使い勝手はシンプルで容易です。両方のAPIがXSSFとHSSFのコンポーネントごとに用意されていますが、この連載では「Usermodel API」のみ利用します。

Excel構造に対応したクラス

 Usermodel APIはExcelを構成するパーツごとにクラスやインターフェースを用意しています。主な構成パーツに対応するXSSFパッケージのクラスは下記になります。

XSSF提供クラスの例
構成パーツ クラス名
ワークブック XSSFWorkbook
ワークシート XSSFSheet
XSSFRow
セル XSSFCell
書式設定 XSSFCellStyle
フォント XSSFFont

 XSSFコンポーネントを利用してのOOXML形式のExcelファイルの基本操作は、HSSFコンポーネントを利用してMicrosoft OLE2複合ドキュメント形式(以降OLE2形式)のExcelファイルを操作するのとほとんど変更がないように配慮がはかられています。利用するクラス名は上記の一覧にあるようにHSSFではなくXSSFから始まるクラス名を利用します。

 また、HSSFを利用されたことがない方でもXSSFでのExcelファイル操作は容易に理解できるので心配はいりません。では、簡単なサンプルプログラムでExcelファイルの基本操作を確認しましょう。

ソース1
import java.io.FileOutputStream;

import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class XSSFSample {

    public static void main(String[] args) throws Exception {

        //(1)Excelファイルを表すワークブックオブジェクトを生成
        XSSFWorkbook wb = new XSSFWorkbook();

        //(2)セルスタイルの生成
        XSSFCellStyle style = wb.createCellStyle();

        //(3)セルスタイルへ罫線の設定
        style.setBorderBottom(XSSFCellStyle.BORDER_THIN);
        style.setBottomBorderColor(IndexedColors.BLACK.getIndex());
        style.setBorderLeft(XSSFCellStyle.BORDER_THIN);
        style.setLeftBorderColor(IndexedColors.GREEN.getIndex());
        style.setBorderRight(XSSFCellStyle.BORDER_THIN);
        style.setRightBorderColor(IndexedColors.BLUE.getIndex());
        style.setBorderTop(XSSFCellStyle.BORDER_MEDIUM_DASHED);
        style.setTopBorderColor(IndexedColors.BLACK.getIndex());

        //(4)フォントを生成し、セルスタイルへ設定
        XSSFFont font = wb.createFont();
        font.setFontHeightInPoints((short) 8);
        font.setFontName("Courier New");
        font.setColor(IndexedColors.RED.getIndex());
        style.setFont(font);

        //(5)ワークシートオブジェクトを生成
        XSSFSheet sheet = wb.createSheet("XSSFSheet1");

        //(6)行の作成
        XSSFRow row = sheet.createRow(1);

        //(7)セルを生成し、値とセルスタイルを設定
        XSSFCell cell = row.createCell(1);
        cell.setCellValue("XSSF");
        cell.setCellStyle(style);

        //(8)ワークブックオブジェクトをファイル出力
        FileOutputStream fileOut = new FileOutputStream("XSSFSample.xlsx");
        wb.write(fileOut);
        fileOut.close();
    }
}
  • ソース1 -(1)
  •  OOXML形式のExcelファイルを表すXSSFワークブックオブジェクトを生成しています。引数なしのXSSFWorkbookのコンストラクタを呼ぶだけです。

  • ソース1 -(2)
  •  ワークブックオブジェクトからセルの書式情報を表すセルスタイルオブジェクトを生成しています。このオブジェクトの持つメソッドを利用して(3)では「罫線」、(4)では「フォント」情報をセルスタイルオブジェクトに設定しています。

  • ソース1 -(3)
  •  セルスタイルオブジェクトのメソッドを利用して、「罫線」の種類と色を上下左右の配置ごとに設定しています。

  • ソース1 -(4)
  •  ワークブックオブジェクトからフォントを表すフォントオブジェクトを生成しています。ここではフォントサイズ、フォント名と色を設定後、書式情報を表すセルスタイルオブジェクトへフォント情報を設定しています。

  • ソース1 -(5)
  •  ワークブックオブジェクトから「XSSFSheet1」というシート名のワークシートオブジェクトを生成しています。

  • ソース1 -(6)
  •  ワークシートオブジェクトから行を生成しています。引数に渡す番号は「ワークシートに表示されている行番号 -1」の値です。サンプルでは1を渡しているので、2行目を生成したことになります。

  • ソース1 -(7)
  •  行オブジェクトからセルオブジェクトを生成しています。引数に渡す番号は「ワークシートに表示されている列番号 -1」の値です。サンプルでは1を渡しているので、2列目(B列)にセルを生成したことになります。

  • ソース1 -(8)
  •  「XSSFSample.xlsx」というファイル名と拡張子でワークブックオブジェクトをファイル出力しています。

     基本的な操作を紹介しただけのサンプルプログラムですが、XSSFのUsermodel APIが非常に直観的で容易であることが確認できたと思います。

     なお、ワークブックオブジェクトから生成したセルスタイルやフォントオブジェクトはワークブック内の複数のセルで利用できます。

     ソース1をコンパイル後に実行するとカレントディレクトリに「XSSFSample.xlsx」が出力されます。

実行結果
実行結果

  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 土田 将人(ツチダ マサト)

    株式会社ビーブレイクシステムズにて業務システムのパッケージソフト(MA-EYES)の製品開発に従事。英語や会計等、システム開発以外のスキルを活かして官公庁やメーカ系のシステム開発で活躍中。少し前に、パッケージソフトMA-EYESの開発を通して「POI」を知り尽くし、勢い余って本稿の執筆に至る。

バックナンバー

連載:最新POIでOffice Open XML形式のExcelファイルを操作
All contents copyright © 2006-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5