======================================
基本的な使い方
======================================
-----------------
ダウンロード
-----------------
Mavenを使用する場合は *pom.xml* に以下の記述を追加してください。
.. sourcecode:: xml
:linenos:
:caption: pom.xmlの依存関係
com.github.mygreen
excel-cellformatter
0.12
本ライブラリは、ロギングライブラリ `SLF4j `_ を使用しているため、好きな実装を追加してください。
.. sourcecode:: xml
:linenos:
:caption: ロギングライブラリの実装の追加(Log4jの場合)
org.slf4j
slf4j-log4j12
1.7.1
log4j
log4j
1.2.17
-----------------
Apaceh POIの場合
-----------------
`Apache POI `_ を利用する場合は、 *POICellFormatter* を利用します。
* 書式が「m/d/yy」の時など、実行環境の言語設定によって異なる場合は、ロケールを指定します。
* ロケールを指定しない場合は、デフォルトのロケールになるため、Linux環境などのでは注意してください。
* Cellのインスタンスがnullの場合、空(Blank)セルとして扱います。
* POIの場合、データの入力がない領域のセルは、nullとなるためです。
* これはJExcelAPIの仕様に合わせるためです。
* 結合されたセルの場合、結合領域を走査し、非空セルがそのセルの値を評価します。
* POIの場合、結合されたセルの領域は、基本的に左上のセルに値が設定され、それ以外のセルは空セルとなるためです。
* ただし、古いバージョンのExcelだったり、プログラムから出力したExcelファイルの場合、
必ずしも左上のセルに値が入っているとは限らないため、結合した全ての領域を走査します。
* これはJExcelAPIの仕様に合わせるためです。
* 数式や関数が設定されたセルの場合、それらを評価した結果を返します。
* POIが対応していない数式や関数の場合、Excel上では正しく表示されていても、エラーセルの扱いとなります。
* 使用するPOIのバージョンによって対応する関数も異なります。
.. sourcecode:: java
Cell cell = /* セルの値の取得 */;
final POICellFormatter cellFormatter = new POICellFormatter();
String contents = cellForrmatter.formatAsString(cell);
// ロケールを指定してフォーマットする。
contents = cellForrmatter.formatAsString(cell, Locale.JAPANESE);
* 書式に色の条件式など指定されている場合、詳細の結果を取得することもできます。
.. sourcecode:: java
final POICellFormatter cellFormatter = new POICellFormatter();
// フォーマット結果の詳細を取得する
CellFormatResult result = cellForrmatter.format(cell);
// フォーマットした文字列の取得
String text = result.getText();
// 文字色が設定されている場合、その色の取得。
// 色が設定されていない場合は、nullを返す。
MSColor color = result.getTextColor();
// フォーマット対象の値を取得します。
// どのタイプの書式として処理されたかによって、値の取得方法がことなります。
if(result.isDate()) {
Date dateValue = result.getValueAsDate();
} else if(result.isNumber()) {
double numberValue = result.getValueAsDouble();
} else if(result.isText()) {
String stringValue = rsult.getValueAsString();
} else {
// エラー用セルやブランクセルの場合
}
-----------------
JExcelAPIの場合
-----------------
`JExcelAPI `_ を利用する場合は、 *JXLCellFormatter* を利用します。
* 日本語を含むExcelファイルの場合、文字コードを *ISO8859_1* を指定します。
* 指定しない場合は、会計の書式中の円記号 *¥* が文字化けします。
* *Windows-31j* と指定しても文字化けするため、注意してください。
* 1904年始まりの設定がされているExelファイルの設定かどうか、メソッド *JXLUtils.isDateStart1904(...)* で調べた値を渡します。
* 通常は1899年12月31日(Excel表記上は 1900年1月0日)が基準です。
* JXLUtils.isDateStart1904(...)メソッドには、Sheetオブジェクトを引数にとるメソッドも用意されています。
* 書式が「m/d/yy」の時など、実行環境の言語設定によって切り替わる場合は、ロケールを指定します。
* ロケールを指定しない場合は、デフォルトのロケールになるため、Linux環境などでは注意してください。
.. sourcecode:: java
// シートの読み込み
final WorkbookSettings settings = new WorkbookSettings();
settings.setSuppressWarnings(true);
settings.setGCDisabled(true);
// 文字コードを「ISO8859_1」にしないと、一部の文字が文字化けします。
settings.setEncoding("ISO8859_1");
final Workbook workbook = Workbook.getWorkbook(in, settings);
// 1904年始まりのシートか調べる。
boolean startDate1904 = JXLUtils.isDateStart1904(workbook);
Cell cell = /* セルの値の取得 */;
final JXLCellFormatter cellFormatter = new JXLCellFormatter();
// セルの値を文字列として取得
String contents = cellForrmatter.formatAsString(cell, startDate1904);
// ロケールを指定してフォーマットする。
contents = cellForrmatter.formatAsString(cell, Locale.JAPANESE, startDate1904);
.. _howObjectCellFormatter:
----------------------------------
Javaオブジェクトの場合
----------------------------------
Javaのオブジェクトを直接フォーマットすることもできます。
直接フォーマットをする場合、``ObjectCellFormatter`` (**ver0.6から利用可能**)を使用します。
* フォーマットするには、``ObjectCellFormatter#formatAsString(<書式>, <値>)`` を利用します。
* フォーマット可能なクラスは、Excelの型に対応する次のクラスになります。
* 文字列値: ``String``
* ブール値: ``boolean/Boolean``
* 数値
* プリミティブ型 ``byte/short/int/long/float/double``
* プリミティブ型のラッパークラス ``Byte/Short/Integer/Long/Float/Double`` 。
* ``java.math.Number`` のサブクラス ``AtomicInteger/AtomicLong/BigDecimal/BigInteger`` 。
* 日時: ``java.util.Date`` とそのサブクラス ``java.sql.Date/java.sql.Time/java.sql.Timestamp`` 。
.. sourcecode:: java
// 各型に対応したインタフェースを利用します。
ObjectCellFormatter cellFormatter = new ObjectCellFormatter();
String text = cellFormatter.formatAsString("yyyy\"年\"m\"月\"d\"日\";@", Timestamp.valueOf("2012-02-01 12:10:00.000"));
* 細かく設定を行いたい場合は、仮想的なセル ``ObjectCell`` のサブクラスのインスタンスを引数に渡します。
* 文字列型を表すセル: ``TextCell``
* ブール型を表すセル: ``BooleanCell``
* 数値型を表すセル: ``NumberCell``
* 日時型を表すセル: ``DateCell`` 。1904年始まりなどの設定ができます。
.. sourcecode:: java
//仮想的なセルのクラス「ObejctCell」の、型に合った具象クラスを利用します。
ObejctCell cell = new DateCell(Timestamp.valueOf("2012-02-01 12:10:00.000"), "yyyy\"年\"m\"月\"d\"日\";@", false)
CellFormatResult result = cellFormatter.format(cell);
// フォーマットした文字列の取得
String text = result.getText();
// 文字色が設定されている場合、その色の取得。
MSColor color = result.getTextColor();