@XlsRecordFinder
¶
アノテーション @XlsHorizontalRecords 、 @XlsVerticalRecords において、データレコードの開始位置が既存のアノテーションの属性だと表現できない場合に、任意の実装方法を指定するようにします。 [ver.2.0+]
属性
value
で、レコードの開始位置を検索するRecordFinder
の実装クラスを指定します。属性
args
で、レコードの開始位置を検索する実装クラスに渡す引数を指定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | // マッピングの定義
@XlsSheet(name="Users")
public class SheetSheet {
// クラスAに対するマッピング定義
@XlsOrder(1)
// マッピングの終了条件が、「クラスB」であるため、terminalLabelを指定します。汎用的に正規表現で指定します。
@XlsHorizontalRecords(tableLabel="成績一覧", bottom=2, terminal=RecordTerminal.Border, terminateLabel="/クラス.+/")
// クラスAの見出しを探すために、属性argsでクラス名を指定します。
@XlsRecordFinder(value=ClassNameRecordFinder.class, args="クラスA")
private List<Record> classA;
// クラスBに対するマッピング定義
@XlsOrder(2)
// マッピングの終了条件が、終端のセルに罫線があるのため、terminalを指定します。
@XlsHorizontalRecords(tableLabel="成績一覧", bottom=2, terminal=RecordTerminal.Border, terminateLabel="/クラス.+/")
// クラスAの見出しを探すために、属性argsでクラス名を指定します。
@XlsRecordFinder(value=ClassNameRecordFinder.class, args="クラスB")
private List<Record> classB;
}
// クラス用の見出しのレコードを探すクラス
class ClassNameRecordFinder implements RecordFinder {
@Override
public CellPosition find(ProcessCase processCase, String[] args, Sheet sheet,
CellPosition initAddress, Object beanObj, Configuration config) {
// アノテーション @XlsRecordFinder の属性argsで指定された値を元にセルを検索します。
final String className = args[0];
Cell classNameCell = CellFinder.query(sheet, className, config)
.startPosition(initAddress)
.findWhenNotFoundException();
// 見出し用のセルから1つ下がデータレコードの開始位置
return CellPosition.of(classNameCell.getRowIndex()+1, initAddress.getColumn());
}
}
// ユーザレコードの定義
public class UserRecord {
@XlsColumn(columnName="No.", optional=true)
private int no;
@XlsColumn(columnName="氏名")
private String name;
@XlsColumn(columnName="算数")
private Integer sansu;
@XlsColumn(columnName="国語")
private Integer kokugo;
@XlsColumn(columnName="合計")
@XlsFormula(value="SUM(D{rowNumber}:E{rowNumber})", primary=true)
private Integer sum;
@XlsIgnorable
public boolean isEmpty() {
return IsEmptyBuilder.reflectionIsEmpty(this, "positions", "labels", "no");
}
// getter、setterは省略
}
|