2. 注意事項

2.1. ExcelとJava間で数値をマッピングする際の注意事項

ExcelとJavaとでは表現可能な数値の有効桁数がなどが異なるため、桁落ちなどのため注意が必要です。

  • 文字列型のセルの値をJavaの数値型にマッピングする場合、Javaで表現可能な最大値/最小値を超えてマッピングした場合、エラーとなります。

    • ver0.5以降の場合、com.gh.mygreen.xlsmapper.cellconvert.TypeBindException が発生します。

    • ver0.4以前の場合、オーバーフローを起こして読み込まれます。

      例えば、shortに最大値+1(32768)がセルに設定されている場合、オーバーフローを起こして、-32768 として読み込まれます。

  • Excelでは有効桁数が15桁であるため、Javaのlong型など15桁を超える表現が可能な数値を書き込んだ場合、数値が丸められます。

    • 例えば、long型の19桁の数値 1234567890123456789 を書き込んだ場合、16桁以降の値が丸められ 1234567890123450000 として書き込まれます。

    • Excelの仕様については、Excel の仕様と制限 を参照してください。

2.2. アノテーションの定義位置

XlsMapperでは、フィールドとメソッドの両方にアノテーションを付与することができます。 アノテーションは、フィールドまたはフィールドに対するアクセッサメソッドに定義可能です。 読み込みと書き込みの両方を行うならば、フィールドに定義することをお薦めします。

  • クラスの場合、全てのアクセスレベル(public/protected/private/なし)に付与したアノテーションが有効になります。

    • ただし、継承元の親クラスに定義されたものは無効です。

    • 内部クラスとして定義する場合、静的な static class で定義する必要があります。

  • フィールドの場合、全てのアクセスレベル(public/protected/privte/なし)に付与したアノテーションが有効になります。

  • メソッドの場合、publicのみ有効になります。

    • メソッドに付与した場合、読み込み時はsetterに付与したアノテーションを用います。 書き込み時は、getterに付与したアノテーションを用います。

    • フィールドと対応するメソッド(getter/setter)の両方にアノテーションを付与した場合、メソッドに付与したアノテーションが優先されます。

    • 読み込み時と書き込み時の両方を行うことを考慮すると、フィールドにアノテーションを付与することをお薦めします。

注釈

アクセッサメソッドを動的に生成する Lombok を利用する場合は、フィールドに定義してください。