CreationHelperインターフェース
Javaの仕様である「インターフェースや抽象クラスでは静的メソッドが持てない」という点を回避しつつ、OOXMLとOLE2形式の両方のExcelファイルに対応可能にするために用意された特別なインターフェースとして「CreationHelper」があります。CreationHelperはWorkbookオブジェクトから取得できます。
CreationHelperを利用すると取得できるインターフェースを下記に示します。取得時には、これらのインターフェースには実行時に扱うコンポーネント(XSSFまたはHSSF)に適切な実装クラスが代入されていることになります。
| インターフェース | 説明 |
| ClientAnchor | ワークシートごとに管理され、シート内での位置情報を扱う |
| DataFormat | セル値の表示形式を扱う |
| HyperLink | Excelのハイパーリンクを扱う |
| FormulaEvaluator | セル値の数式評価を扱う |
| RichTextString | セルに含まれる文字列の書式形式を扱う 同一セル内に含まれる文字列の部分ごとに別々のフォントを適用するなどが可能 |
ではHyperlinkを例にしてサンプルプログラムで確認してみましょう。
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)
- ソース4 -(2)
- ソース4 -(3)
- ソース4 -(4)
- ソース4 -(5)
ワークブックオブジェクトからCreationHelperインターフェースを取得しています。
セルスタイルとフォントインターフェースを利用して、ハイパーリンク用のフォントオブジェクトを生成後、セルスタイルに設定しています。
セルを生成し、セル値に文字列「URL Link」を設定しています。
ハイパーリンクオブジェクトをCreationHelperインターフェースから生成し、リンク先のURLを設定しています。(3)で作成したセルにハイパーリンクオブジェクトとハイパーリンク用に(2)で作成した書式設定を適用しています。
「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の使用方法をさらに探索し、計算式や図形などの使用方法を説明していく予定です。

