@XlsIgnorable

アノテーション @XlsHorizontalRecords@XlsVerticalRecords を使用して、読み込む際に、空のレコードを読み飛ばしたい場合、 レコードが空と判定するためのメソッドに付与します。

  • @XlsIgnorable を付与したメソッドは、publicかつ引数なしの戻り値がboolean型の書式にする必要があります。

  • @XlsVerticalRecords でも同様に使用できます。

また、この機能は読み込み時のみに有効です。書き込み時は、空のレコードでもそのまま出力されます。

 1// ルートのオブジェクト
 2@XlsSheet(name="シート名")
 3public class UnitUser {
 4
 5    @XlsHorizontalRecords(tableLabel="ユーザ一覧")
 6    private List<User> users;
 7
 8}
 9
10// レコードのオブジェクト
11public class User {
12
13    @XlsColumn(columnName="No.")
14    private int no;
15
16    @XlsColumn(columnName="名前")
17    private String name;
18
19    @XlsColumn(columnName="住所")
20    private String address;
21
22    // レコードが空と判定するためのメソッド
23    @XlsIgnorable
24    public boolean isEmpty() {
25
26      if(name != null || !name.isEmpty()) {
27        return false;
28      }
29
30      if(address != null || !address.isEmpty()) {
31        return false;
32      }
33
34      return true;
35    }
36}

IsEmptyBuilderを使った記述の簡単化

IsEmptyBuilder (ver.0.5から追加)を利用することで、より簡潔に記述することも可能です。

  • IsEmptyBuilder#reflectionIsEmpty(...) を利用して判定する場合、位置情報を保持するフィールド Map<String, Point> positions などは除外対象とする必要があります。

  • 独自に判定する場合、IsEmptyBuilder#append(...) を利用します。

  • さらに、 IsEmptyBuilder#compare(IsEmptyComparator) を利用することで独自の判定をできます。その際に、Lambda式を利用すると簡潔に記載できます。

 1// ルートのオブジェクト
 2@XlsSheet(name="シート名")
 3public class UnitUser {
 4
 5    @XlsHorizontalRecords(tableLabel="ユーザ一覧")
 6    private List<User> users;
 7
 8}
 9
10// レコードのオブジェクト
11public class User {
12
13    // マッピングしたセルの位置情報を保持する。
14    private Map<String, Point> positions;
15
16    // マッピングしたセルのラベル情報を保持する。
17    private Map<String, String> labels;
18
19    @XlsColumn(columnName="No.")
20    private int no;
21
22    @XlsColumn(columnName="名前")
23    private String name;
24
25    @XlsColumn(columnName="住所")
26    private String address;
27
28    // レコードが空と判定するためのメソッド
29    @XlsIgnorable
30    public boolean isEmpty() {
31        return IsEmptyBuilder.reflectionIsEmpty(this, "positions", "labels");
32
33    }
34
35    // 独自に判定する場合
36    public boolean isEmpty2() {
37        return new IsEmptyBuilder()
38            .append(name)
39            .compare(() -> StringUtils.isBlank(address))
40            .isEmpty();
41    }
42}