@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}