------------------------------------------------ ビルトインフォーマット(組み込み書式)について ------------------------------------------------ Excelの書式は、ファイル内部では *インデックス番号* に対して、 *書式のパターン* が割り振られています。 その中で、インデックス番号が 0~49は予め固定のフォーマットを持ち、ビルトインフォーマット(組み込み書式)と呼ばれます。 * Excelのバージョンによっては、インデックス番号だけ持ち、書式を持たない場合があります。 * 50番以降は、ユーザ定義用書式として、ファイルによって異なります。 * ただし、50~59番は、Excelの言語環境によって予約された番号で、インデックス番号だけ持ち、書式を持たない場合があります。 * ビルインフォーマットは、JExcelAPIの場合とApaceh POIでは一部異なっています。 * OSの言語環境によって変わるものがあります。 * 日時、通貨記号を含む書式は、環境によって変わる可能性があります。 * JExcelAPI/Apache POIとも英語環境の値で固定で定義されており、日本語の書式には対応していません。 .. note:: ビルトインフォーマットは、各ライブラリでプログラムで固定長の文字列として記述されています。 * Apache POIの場合、 ``org.apache.poi.ss.usermodel.BuiltinFormats`` (`Javadoc `_ ) で定義されています。 * JExcel APIの場合、 非公開のクラス ``jxl.biff.BuiltInFormat`` で定義されています。 本ライブラリでは、OSの言語によって変わるような書式や間違っている書式は、 予め ``FormatterResolver#registerDefaultFormat()`` メソッド内で登録し、正しい書式で取得できるようにしています。 .. list-table:: ビルドインフォーマットの一覧(0~49) :widths: 5 5 25 25 20 20 :header-rows: 1 * - | index | 16進 - | index | 10進 - 英語環境 - | 日本語環境 | (英語環境と同じ場合は省略) - 例 - 備考 * - 0 - 0 - ``General`` - ``標準/G`` - - 標準の設定。日本語の場合、内部的には英語環境と同じ。 * - 1 - 1 - ``0`` - - ``-123`` - 小数なしの数値の書式。 * - 2 - 2 - ``0.00`` - - ``-123.45`` - 小数ありの数値の書式。 * - 3 - 3 - ``#,##0`` - - ``-12,345`` - 桁区切りの数値の書式。 * - 4 - 4 - ``#,##0.00`` - - ``-12,345.67`` - 小数あり、桁区切りの数値の書式。 * - 5 - 5 - ``$#,##0_);($#,##0)`` - ``\#,##0;\-#,##0`` - ``\-123`` - 会計用の書式。通貨の単位や括弧が異なる。 * - 6 - 6 - ``$#,##0_);[Red]($#,##0)`` - ``\#,##0;[Red]\-#,##0`` - \-123 - 会計用の書式。通貨の単位や括弧が異なる。 * - 7 - 7 - ``$#,##0.00);($#,##0.00)`` - ``\#,##0.00;\-#,##0.00`` - ``\-123.46`` - 会計用の書式。通貨の単位や括弧が異なる。 * - 8 - 8 - ``$#,##0.00_);[Red]($#,##0.00)`` - ``\#,##0.00;[Red]\-#,##0.00`` - ``\-123.46`` - 会計用の書式。通貨の単位や括弧が異なる。 * - 9 - 9 - ``0%`` - - ``12%`` - 100分率の書式。 * - a - 10 - ``0.00%`` - - ``12.34%`` - 100分率の書式。 * - b - 11 - ``0.00E+00`` - - ``1.23E-02`` - 指数用の書式。 * - c - 12 - ``# ?/?`` - - ``12 1/3`` - 分数の書式。 * - d - 13 - ``# ??/??`` - - ``12 10/29`` - 分数の書式。 * - e - 14 - ``m/d/yy`` - ``yyyy/m/d`` - ``2000/2/29`` - 日付の書式。年の桁数、順番が異なる。 * - f - 15 - ``d-mmm-yy`` - - ``29-Feb-00`` - 日付の書式。 * - 10 - 16 - ``d-mmm`` - - ``29-Feb`` - 日付の書式。 * - 11 - 17 - ``mmm-yy`` - - ``Feb-00`` - 日付の書式。 * - 12 - 18 - ``h:mm AM/PM`` - - ``10:19 AM`` - 時刻の書式。 * - 13 - 19 - ``h:mm:ss AM/PM`` - - ``10:19:23 AM`` - 時刻の書式。 * - 14 - 20 - ``h:mm`` - - ``10:19`` - 時刻の書式。 * - 15 - 21 - ``h:mm:ss`` - - ``10:19:23`` - 時刻の書式。 * - 16 - 22 - ``m/d/yy h:mm`` - ``yyyy/m/d h:mm`` - ``2000/2/29 10:19`` - 日時の書式。年の桁数、順番が異なる。 * - 17 - 23 - ``\$#,##0_);\(\$#,##0\)`` - - ``$36,585`` - * - 18 - 24 - ``\$#,##0_);[Red]\(\$#,##0\)`` - - ``$36,585`` - * - 19 - 25 - ``\$#,##0.00_);\(\$#,##0.00\)`` - - ``$36,585.43`` - * - 1a - 26 - ``\$#,##0.00_);[Red]\(\$#,##0.00\)`` - - ``$36,585.43`` - * - 1b - 27 - ``m/d/yy`` - ``[$-411]ge.m.d`` - ``H12.2.29`` - | 日付の書式。日本語環境の場合、和暦表示。 | ファイルを際保存すると、57番に割り振られる。 * - 1c - 28 - ``m/d/yy`` - ``[$-411]ggge"年"m"月"d"日"`` - ``平成12年2月29日`` - | 日付の書式。日本語環境の場合、和暦表示。 | ファイルを際保存すると、58番に割り振られる。 * - 1d - 29 - ``m/d/yy`` - ``[$-411]ggge"年"m"月"d"日"`` - ``平成12年2月29日`` - | 日付の書式。日本語環境の場合、和暦表示。 | ファイルを際保存すると、58番に割り振られる。 * - 1e - 30 - ``m/d/yy`` - - ``2/29/00`` - 日付の書式。 * - 1f - 31 - ``m/d/yy`` - ``yyyy"年"m"月"d"日"`` - ``2000年2月29日`` - 日付の書式。日本語環境の場合、和暦表示。 * - 20 - 32 - ``h:mm:ss`` - ``h"時"mm"分"`` - ``10時19分`` - 時間の書式。日本語環境の場合、区切りが異なる。 * - 21 - 33 - ``h:mm:ss`` - ``h"時"mm"分"`` - ``10時19分`` - 時間の書式。日本語環境の場合、区切りが異なる。 * - 22 - 34 - ``h:mm:ss`` - ``yyyy"年"m"月"`` - ``2000年2月`` - | 時刻の書式。日本語環境の場合、日付の書式。 | ファイルを際保存すると、55番に割り振られる。 * - 23 - 35 - ``h:mm:ss`` - ``m"月"d"日"`` - ``2月29日`` - | 時刻の書式。日本語環境の場合、日付の書式。 | ファイルを際保存すると、56番に割り振られる。 * - 24 - 36 - ``m/d/yy`` - ``[$-411]ge.m.d`` - ``H12.2.29`` - | 時刻の書式。日本語環境の場合、和暦表示。 | ファイルを際保存すると、57番に割り振られる。 * - 25 - 37 - ``#,##0_);(#,##0)`` - ``#,##0;-#,##0`` - ``-123`` - 数値の書式。日本語の場合、負の表現に括弧が付かない。 * - 26 - 38 - ``#,##0_);[Red](#,##0)`` - ``#,##0;[Red]-#,##0`` - ``-123`` - 数値の書式。日本語の場合、負の表現に括弧が付かない。 * - 27 - 39 - ``#,##0.00_);(#,##0.00)`` - ``#,##0.00;-#,##0.00`` - ``-123.46`` - 数値の書式。日本語の場合、負の表現に括弧が付かない。 * - 28 - 40 - ``#,##0.00_);[Red](#,##0.00)`` - ``#,##0.00;[Red]-#,##0.00`` - ``-123.46`` - 数値の書式。日本語の場合、負の表現に括弧が付かない。 * - 29 - 41 - ``_(* #,##0_);_(* (#,##0);_(* "-"_);_(@_)`` - ``_ * #,##0_ ;_ * -#,##0_ ;_ * "-"_ ;_ @_`` - ``-123`` - 数値の書式。日本語の場合、負の表現に括弧が付かない。 * - 2a - 42 - ``_($* #,##0_);_($* (#,##0);_($* "-"_);_(@_)`` - ``_ \* #,##0_ ;_ \* -#,##0_ ;_ \* "-"_ ;_ @_`` - ``\-123`` - 会計の書式。通貨が異なる。日本語の場合、負の表現に括弧が付かない。 * - 2b - 43 - ``_(* #,##0.00_);_(* (#,##0.00);_(* "-"??_);_(@_)`` - ``_ * #,##0.00_ ;_ * -#,##0.00_ ;_ * "-"??_ ;_ @_`` - ``-123.46`` - 数値の書式。日本語の場合、負の表現に括弧が付かない。 * - 2c - 44 - ``_($* #,##0.00_);_($* (#,##0.00);_($* "-"??_);_(@_)`` - ``_ \* #,##0.00_ ;_ \* -#,##0.00_ ;_ \* "-"??_ ;_ @_`` - ``\-123.46`` - 会計の書式。通貨が異なる。日本語の場合、負の表現に括弧が付かない。 * - 2d - 45 - ``mm:ss`` - - ``10:19`` - 時刻の書式。 * - 2e - 46 - ``[h]:mm:ss`` - - ``30:10:19`` - 時間時間の書式。 * - 2f - 47 - ``mm:ss.0`` - - ``10:19.0`` - 時間の書式。 * - 30 - 48 - ``##0.0E+0`` - - ``12.3E+0`` - 指数の書式。 * - 41 - 49 - ``@`` - - ``テキスト`` - 文字列の書式。 .. list-table:: ビルドインフォーマットの一覧(50~) :widths: 5 5 25 25 20 20 :header-rows: 1 * - | index | 16進 - | index | 10進 - 英語環境 - | 日本語環境 | (英語環境と同じ場合は省略) - 例 - 備考 * - 37 - 55 - ``h:mm:ss`` - ``yyyy"年"m"月"`` - ``2000年2月`` - 時刻の書式。日本語の場合、日付の書式。 * - 38 - 56 - ``h:mm:ss`` - ``m"月"d"日"`` - ``2月29日`` - 時刻の書式。日本語の場合、日付の書式。 * - 39 - 57 - ``m/d/yy`` - ``[$-411]ge.m.d`` - ``H12.2.29`` - 日付の書式。日本語の場合、和暦表示。 * - 3A - 58 - ``m/d/yy`` - ``[$-411]ggge"年"m"月"d"日"`` - ``平成12年2月29日`` - 日付の書式。日本語の場合、和暦表示。 組み込み書式以外で、OSの言語環境によって変わる書式があります。 Excel上では、書式の前にアスタリスク(*)が付いている書式です。 .. list-table:: 言語によって書式が変わる :widths: 20 20 20 40 :header-rows: 1 * - 英語環境 - 日本の語環境 - 例 - 備考 * - ``m/d/yy`` - ``yyyy/m/d`` - ``2000/2/29`` - | 日付の書式。Excelの表記上は、「* 2001/3/14」と表示されます。 | インデックス番号14の組み込み書式です。 * - ``[$-F800]dddd\,\ mmmm\ dd\,\ yyyy`` - ``yyyy"年"m"月"d"日"`` - ``2000年2月29日`` - 日付の書式。Excelの表記上は、「* 2001年3月14日」と表示されます。 * - ``[$-F400]h:mm:ss\ AM/PM`` - ``h:mm:ss`` - ``10:19:23`` - 日付の書式。Excelの表記上は、「* 13:30:55」と表示されます。 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ JExcelAPIによる書式のインデックスの取得 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * JExcelAPIでは、書式のインデックスの取得は ``DisplayFormat#getFormatIndex()`` から取得します。 * ビルトインフォーマットの定義は、非公開のクラス ``jxl.biff.BuiltInfFomrat`` で定義されています。 * 本ライブラリでは、 ``JXLCell#getFormatIndex()`` で実装されている。 .. sourcecode:: java final CellFormat cellStyle = cell.getCellFormat(); if(cellStyle == null) { // 書式を持たない場合 return 0; } final Format cellFormat = cellStyle.getFormat(); if(cellFormat == null && cellStyle instanceof XFRecord) { final XFRecord record = (XFRecord) cellStyle; return (short) record.formatIndex; } else if(cellFormat == null) { // 書式を持たない場合 return 0; } if(cellFormat instanceof DisplayFormat) { final DisplayFormat displayFormat = (DisplayFormat)cellFormat; return (short) displayFormat.getFormatIndex(); } // 不明な場合 return 0; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Apache POIによる書式のインデックスの取得 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Apache POIの書式のインデックスは、 ``CellSyle#getDataFormat()`` から取得します。 .. sourcecode:: java short formatIndex = cell.getCellStyle().getDataFormat();