SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

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

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

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

CreationHelperインターフェース

 Javaの仕様である「インターフェースや抽象クラスでは静的メソッドが持てない」という点を回避しつつ、OOXMLとOLE2形式の両方のExcelファイルに対応可能にするために用意された特別なインターフェースとして「CreationHelper」があります。CreationHelperはWorkbookオブジェクトから取得できます。

 CreationHelperを利用すると取得できるインターフェースを下記に示します。取得時には、これらのインターフェースには実行時に扱うコンポーネント(XSSFまたはHSSF)に適切な実装クラスが代入されていることになります。

CreationHelper提供インターフェース
インターフェース 説明
ClientAnchor ワークシートごとに管理され、シート内での位置情報を扱う
DataFormat セル値の表示形式を扱う
HyperLink Excelのハイパーリンクを扱う
FormulaEvaluator セル値の数式評価を扱う
RichTextString セルに含まれる文字列の書式形式を扱う
同一セル内に含まれる文字列の部分ごとに別々のフォントを適用するなどが可能

 ではHyperlinkを例にしてサンプルプログラムで確認してみましょう。

ソース4
import java.io.FileOutputStream;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.Hyperlink;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class HyperlinkExample {

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

        Workbook wb = new XSSFWorkbook();
        //(1)CreationHelperの取得
        CreationHelper createHelper = wb.getCreationHelper();

        //(2)ハイパーリンク用の書式を設定
        CellStyle hlink_style = wb.createCellStyle();
        Font hlink_font = wb.createFont();
        hlink_font.setUnderline(Font.U_SINGLE);
        hlink_font.setColor(IndexedColors.BLUE.getIndex());
        hlink_style.setFont(hlink_font);

        //(3)セルに値を設定
        Sheet sheet = wb.createSheet("Hyperlinks");
        Cell cell = sheet.createRow(0).createCell(0);
        cell.setCellValue("URL Link");

        //(4)ハイパーリンクの生成と設定
        Hyperlink link = createHelper.createHyperlink(Hyperlink.LINK_URL);
        link.setAddress("http://poi.apache.org/");
        cell.setHyperlink(link);
        cell.setCellStyle(hlink_style);

        //(5)ワークブックオブジェクトをファイル出力
        FileOutputStream out = new FileOutputStream("hyperinks.xlsx");
        wb.write(out);
        out.close();

    }
}
  • ソース4 -(1)
  •  ワークブックオブジェクトからCreationHelperインターフェースを取得しています。

  • ソース4 -(2)
  •  セルスタイルとフォントインターフェースを利用して、ハイパーリンク用のフォントオブジェクトを生成後、セルスタイルに設定しています。

  • ソース4 -(3)
  •  セルを生成し、セル値に文字列「URL Link」を設定しています。

  • ソース4 -(4)
  •  ハイパーリンクオブジェクトをCreationHelperインターフェースから生成し、リンク先のURLを設定しています。(3)で作成したセルにハイパーリンクオブジェクトとハイパーリンク用に(2)で作成した書式設定を適用しています。

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

実行結果
実行結果

 サンプルプログラムでWorkbookインターフェースに代入されている実装クラスは「XSSFWorkbook」でしたが、Hyperlinkを生成している箇所でも「XSSF」という記述はありませんでした。

 OOXMLとOLE2形式の両方に対応する場合は、Workbookインターフェースに代入されているクラスが「HSSFWorkbook」のケースもあります。しかし、そのような時でもCreationHelperインターフェースを利用すればXSSFワークブックなのかHSSFワークブックなのかを「instanceOf」で確認するような分岐処理を記述する必要はありません。

 ちなみにXSSFには下記コンストラクタがありますが、修飾司がProtectedであり、直接呼ぶことはできません。ハイパーリンクを作成するときは必ずCreationHelperを使用してください。

protected XSSFHyperlink(int type)

 また、サンプルではハイパーリンクの種類にHyperlinkインターフェースの定数から「Hyperlink.LINK_URL」を指定して、リンク先がURLのハイパーリンクを作成しました。Hyperlinkインターフェースでは「LINK_URL」以外に次のリンク種類も選択できます。

  • LINK_DOCUMENT:ドキュメント内をリンク先に指定
  • LINK_EMAIL:Emailアドレスをリンク先に指定
  • LINK_FILE:ファイルをリンク先に指定

まとめ

 今回はUsermodel APIの中でもワークブック、ワークシート、行、セルに関連する基本操作を解説しました。基本的なAPIの使い方は、OOXML形式ファイル対応のXSSFパッケージでも、以前からあるHSSFパッケージと大きな変更がないことが確認できました。また、OOXMLとOLE2形式の両方に対応しようとする場合には、共通インターフェースを提供するSSパッケージが利用可能であり、「WorkbookFactory」クラスや「CreationHelper」インターフェースを利用するとコンポーネントの違いによる分岐処理を減らせることも分かりました。次回はUsermodel APIの使用方法をさらに探索し、計算式や図形などの使用方法を説明していく予定です。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
最新POIでOffice Open XML形式のExcelファイルを操作連載記事一覧

もっと読む

この記事の著者

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

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4881 2010/03/01 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング