@Retention(value=RUNTIME) @Target(value={METHOD,FIELD}) @Documented @XlsFieldProcessor(value={}) public @interface XlsIterateTables
XlsHorizontalRecords。XlsVerticalRecords。
XlsHorizontalRecords と同時に使用することはできません。
XlsLabelledCell。XlsLabelledArrayCells。使い方を基本的な例を元に説明していきます。
基本的な例
シート用クラスの場合、属性tableLabel()で、繰り返し部分の表の名称を指定します。
また、属性bottom()で、アノテーションXlsHorizontalRecordsを
マッピングする表の開始位置が表の名称からどれだけ離れているかを指定します。
// シート用クラス
@XlsSheet(name="シート名")
public class SampleSheet {
@XlsIterateTables(tableLabel="部門情報", bottom=2)
private List<SampleTable> tables;
}
繰り返し部分に対応するクラスは、以下のように、
アノテーションXlsLabelledCell、XlsHorizontalRecordsを使用することができます。
アノテーションXlsHorizontalRecords を使用する場合、属性XlsHorizontalRecords.tableLabel() は設定する必要はありません。
アノテーション XlsIterateTablesの属性tableLabel()とbottom()の値を引き継ぐため、指定しなくても問題ないためです。
// テーブル用クラス
public class SampleTable {
@XlsLabelledCell(label="部門名", type=LabelledCellType.Right)
private String deptName;
@XlsHorizontalRecords(terminal=RecordTerminal.Border)
private List<SampleRecord> records;
}
繰り返し部分に対応するJavaBeanでアノテーション XlsHorizontalRecords を使用した場合、
通常の場合と同じくアノテーションXlsColumnやXlsMapColumnsで列とのマッピングを行います。
// レコード用クラス
public class SampleRecord {
@XlsColumn(columnName="ID")
private String id;
@XlsColumn(columnName="名前")
private String name;
}
XlsVerticalRecords も使用することができます。
XlsHorizontalRecords と同時に使用することはできません。XlsVerticalRecords.tableLabelAbove()の値がtrueとが自動的に有効になり、表の見出しが上部にあることを前提に処理されます。
縦方向の表のマッピング
// シート用クラス
@XlsSheet(name="観測データ")
public class SampleSheet {
@XlsIterateTables(tableLabel="/観測情報.+/", bottom=2)
private List<DataTable> tables;
}
// テーブル用クラス
public class DataTable {
@XlsLabelledCell(label="日付", type=LabelledCellType.Right)
private LocalDate date;
XlsVerticalRecords(terminal=RecordTerminal.Border)
private List<WeatherRecord> records;
}
// レコード用クラス
public class WeatherRecord {
@XlsColumn(columnName="時間")
private String time;
@XlsColumn(columnName="降水")
private double precipitation;
}
シートの構造は同じだが、ラベルのセルが微妙に異なる場合、ラベルセルを正規表現による指定が可能です。
また、空白や改行を除去してラベルセルを比較するように設定することも可能です。
正規表現で指定する場合、アノテーションの属性の値を /正規表現/ のように、スラッシュで囲みます。
Configuration.setRegexLabelText(boolean) の値を trueに設定します。ラベセルの値に改行が空白が入っている場合、それらを除去し正規化してアノテーションの属性値と比較することが可能です。
Configuration.setNormalizeLabelText(boolean) の値を trueに設定します。これらの指定が可能な属性は、tableLabel()です。
// システム設定
XlsMapper xlsMapper = new XlsMapper();
xlsMapper.getConfiguration()
.setRegexLabelText(true) // ラベルを正規表現で指定可能にする機能を有効にする。
.setNormalizeLabelText(true); // ラベルを正規化して比較する機能を有効にする。
// シート用クラス
@XlsSheet(name="Users")
public class SampleSheet {
// 正規表現による指定
@XlsIterateTables(tableLabel="/部門情報.+/", bottom=2)
private List<SampleTable> tables;
}
| 修飾子とタイプ | 必須要素と説明 |
|---|---|
String |
tableLabel
繰り返し部分の見出しラベルを指定します。
|
| 修飾子とタイプ | 任意要素と説明 |
|---|---|
int |
bottom
|
ProcessCase[] |
cases
適用するケースを指定します。
|
boolean |
optional
表が見つからなかった場合、無視するか指定します。
|
Class<?> |
tableClass
繰り返し部分の情報を格納するJavaBeanのクラス。
|
public abstract String tableLabel
システム設定により、正規表現による指定や正規化(改行、空白、タブの削除)による比較の対象となります。
public abstract Class<?> tableClass
指定しない場合は、Genericsの定義タイプを使用します。
public abstract ProcessCase[] cases
Copyright © 2025 mygreen. All rights reserved.