1. はじめに

1.1. このライブラリの位置付け及び目的

このライブラリは、JavaのExcelライブラリである、Apache POI、JExcel APIにて、セルの値を正しくフォーマットして文字列として取得するための物です。

両ライブラリとも、セルの値を取得する機能を持っていますが、一部、Excel上とは異なる値で取得されます。 特に、次の点に問題があります。

  • 日付、特に和暦は対応していない。 Javaの java.text.SimpleDateFormat では対応していない書式がある。

    • セルの値を取得するときに、ライブラリの内部では、Excelの書式をJavaの java.text.SimpleDateFormat の書式に変換してフォーマットしているが、Javaにはない書式記号があるため、正確な値が取得できない。

    • 元号などを出力する際にはJavaではLocaleを渡す必要があるが、Excelでは書式に条件式としてロケール情報が設定でき、書式ごとにロケールを切り替えることができる。

    • Javaは月のMと分のmは大文字/小文字で区別しているが、Excelは大文字/小文字の区別がなく、前後の関連する日時の記号を含むかで判断している。

    • 経過時間の書式に対応していない。

  • 数値の書式の場合、Javaの java.text.DecimalFormat に対応していない書式がある。

    • セルの値を取得するときに、ライブラリの内部では、Excelの書式をJavaの java.text.DecimalFormat の書式に変換してフォーマットしているが、Javaにはない書式記号があるため、正確な値が取得できない。

    • Excelの場合、最大4つのセクションが定義できるが、Javaの場合、正・負の2つのセクションの定義しかできない。

    • 分数表示には対応していない。

  • セルの値が数値か日時なのかの区別が正確にできない。

    • Excelの内部では、数値と日時は同じデータ型の数値(Javaでいうdouble型)で保持している。 そのため、書式から判定する必要があるが、上記のようにJavaでは利用できない書式記号があるので正確に判定できていない。

    • Excel上のセルの書式は取得できるため独自に判定できるが、書式記号は多いため対応が大変である。

1.2. 前提環境

このライブラリは、以下の環境で利用できます。

動作確認環境

ライブラリ

バージョン

備考

Java

Java8 (ver.1.8)以上

Apaceh POI

ver. 4.0 以上。
Apaceh POIは現在も開発が続けられているため、随時動作確認していきます。
Excel2007で追加されたOffice Open XML(OOXML)形式に対応しています。
POIの内部の形式である、HSSF(従来のバイナリ形式)、XSSF(OOXML形式)に対応しています。
ver. 3.8で追加された、書き込み専用のSXSSF(ストリーム形式)には対応していません。

JExcel API

ver. 2.6.10 以上。
JExcel API自体は、Excel2007で追加されたOffice Open XML(OOXML)形式に対応していません。

Microsoft Excel

ver. 2000/2007/2010/2016
ver. 2007/2010 で互換モードで保存したファイルにも対応しています。

他のオフィスイート

Libre Office Calc ver. 4.4

1.3. 制限事項

  • Excelの書式記号 *(アスタリスク) には対応していません。

    • この書式はセルの幅により繰り返し特定の文字を表示するために利用されますが、Excel上の文字サイズ、セル幅によって変わりプログラムでは判別しづらいため対応していません。

    • 本ライブラリで、セルの値をフォーマットした場合、この記号は無視され処理されます。

  • 現在のバージョンでは、Excelの書式は、英語、日本語のロケールのみサポートしています。

    • 今後、他の言語のロケールも追加していく予定です。

  • 1900年始まりの場合、Excelの日付として 1900年1月0日 を設定している場合、本ライブラリでは 1899年12月31日 として処理します。

    • また、1900年2月29日* を設定している場合、 1900年3月1日 として処理します。

  • Excelの 数値の標準書式 において、100,000,000,000 以上の値、または 0.0000000001 以下の値の時、指数表現となりますが、セルの幅が小さいと小数部の有効桁数が変わりますが、本ライブラリは小数部の有効桁数は5桁で固定となります。