タツノオトシゴのブログ

主にJavaに関するものです。

excel-cellformatterのリリース

JExcelAPIやApache POIでExcelの書式に沿ってフォーマットするJavaのライブラリをリリースしました。

セルの書式が日付、会計の場合、JavaのSimpleDateFormatやDecimalFomratではサポートしていない書式記号があり、それらに対応したライブラリになります。

和暦、分数以外にも、漢数字、大字表示など日本語環境で使用可能な書式にも対応しています。

Excel2000〜2010で利用可能な全ての書式に対応しています。
さらに、LibreOfficeなので利用可能な一部の記号にも対応しています。

ただし、Cellの値を文字列としてフォーマットする機能のみで、文字列からオブジェクトに変換するパース機能はありません。

簡単な使い方

Apacehe POIの場合

Cellオブジェクトを「POICellFormatter#fomrat(...)」に渡すだけです。

  • OSの言語環境によって変わる書式があるため、Linux環境の場合は注意が必要です。
    • 引数にLocaleを直接指定することもできます。
  • POICellFormatterは書式オブジェクトをキャッシュするため、インスタンスを使い回しで利用します。
Cell cell = /* セルの値の取得 */;

final POICellFormatter cellFormatter = new POICellFormatter();

String contents = cellForrmatter.format(cell);

// ロケールを指定してフォーマットする。
contents = cellForrmatter.format(cell, Locale.JAPANESE);
Jexcel API

Cellオブジェクトを「JXLCellFormatter#format(...)」に渡します。

  • 日本語を含むExcelファイルの場合、文字コードを ISO8859_1 を指定します。
    • 指定しない場合は、会計の書式中の円記号 ¥ が文字化けします。
    • Windows-31j と指定しても文字化けするため、注意してください。
  • 1904年始まり設定がされているExelファイルの設定かどうか、メソッド

「JXLUtils.isDateStart1904(...)」 で調べた値を渡します。

    • 通常は1899年12月31日(Excel表記上は 1900年1月0日)が基準です。
    • JXLUtils.isDateStart1904(...)メソッドには、Sheetオブジェクトを引数にとるメソッドも用意されています。
// シートの読み込み
final WorkbookSettings settings = new WorkbookSettings();
settings.setSuppressWarnings(true);
settings.setGCDisabled(true);

// 文字コードを「ISO8859_1」にしないと、一部の文字が文字化けします。
settings.setEncoding("ISO8859_1");

final Workbook workbook = Workbook.getWorkbook(in, settings);

Cell cell = /* セルの値の取得 */;

final JXLCellFormatter cellFormatter = new JXLCellFormatter();

// JXLUtils.isDateStart1904(...)を利用して、1904年始まりのシートか調べる。
String contents = cellForrmatter.format(cell, JXLUtils.isDateStart1904(workbook));

// ロケールを指定してフォーマットする。
contents = cellForrmatter.format(cell, Locale.JAPANESE, JXLUtils.isDateStart1904(workbook));