5. セルの値の変換方法

セルの値を加工するためのアノテーションです。

例えば、トリミングや初期値を指定することができます。

表 - 5.1 値を変換するアノテーション

アノテーション

概要

@XlsTrim

トリミングを行いたい場合に指定します。

@XlsDefaultValue

初期値を設定したい場合に指定します。

注釈

値の変換用のアノテーションは、セルをマッピングするアノテーション @XlsCell@XlsLabelledCell@XlsArrayCells@XlsLabelledArrayCells@XlsColumn@XlsMapColumns@XlsArrayColumns を付与しているプロパティに対して有効になります。

5.1. @XlsTrim

トリミングを行いたい場合、アノテーション @XlsTrim を付与します。

  • アノテーションを付与すると、読み込み時と書き込み時にトリムを行います。

  • シート上のセルのタイプ(分類)が数値などの文字列以外の場合は、トリム処理は行われません。

    • ただし、シートのセルタイプが文字列型で、Javaの型がString型以外の数値型やDate型などの場合は、変換する前にトリム処理を行います。

  • 値が空のセルをString型に読み込む場合、アノテーションを付与しないときはnull設定されますが、アノテーションを付与するときは空文字が設定されます。[ver0.5+]

コード - 5.1.1 トリムの指定
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
public class SampleRecord {

    @XlsColumn(columnName="ID")
    @XlsTrim
    @XlsDefaultValue(" 123 ") // 初期値もトリム対象となる。
    private int id;

    @XlsColumn(columnName="名前")
    @XlsConverter             // 空のセルを読み込むと空文字が設定される。
    private String name;

}

5.2. @XlsDefaultValue

読み込み時、または書き込み時に値がnullの時に、代わりにとなる値を指定します。

  • 属性 value で読み込み時/書き込み時のデフォルト値を指定します。

  • 属性 cases で、読み込み時か書き込み時の処理ケースに限定することができます。

    • 何も指定しない場合、読み込み時と書き込み時の両方に適用されます。

  • 日付などの書式がある場合、専用のアノテーションで指定した書式 @XlsDateTimeConverter(javaPattern="<任意の書式>") を元に、文字列をそのオブジェクトに変換し処理します。

  • デフォルト値を指定しないでプリミティブ型に対して読み込む場合、その型の初期値が設定されます。

    • int型は0、double型は0.0、boolean型はfalse。char型の場合は、 '\u0000' 。

    • プリミティブのラッパークラスや参照型の場合は、nullが設定されます。

  • 指定したデフォルト値がマッピング先の型として不正な場合は、通常の型変換エラーと同様に、例外 com.gh.mygreen.xlsmapper.cellconverter.TypeBindException がスローされます。[ver0.5]

  • char型にマッピングする場合、デフォルト値が2文字以上でも、先頭の一文字がマッピングされます。

コード - 5.2.1 初期値の指定
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
public class SampleRecord {

    @XlsColumn(columnName="ID")
    @XlsDefaultValue("-1")
    private int id;

    @XlsColumn(columnName="更新日時")
    @XlsDefaultValue("2010/01/01") // 属性javaPatternで指定した書式に沿った値を指定します。
    @XlsDateTimeConverter(javaPattern="yyyy/MM/dd")
    private Date updateTime;

    @XlsColumn(columnName="備考")
    @XlsDefaultValue(value="-", cases=ProcessCase.Write) // 処理ケースを指定します。
    private String comment;

}