@XlsVerticalRecords
¶
垂直方向に連続する列をListまたは配列にマッピングします。 要するに @XlsHorizontalRecords を垂直方向にしたものです。
メソッドに定義する場合、@XlsHorizontalRecords と同じくList型の引数を1つだけ取るsetterメソッドに対して付与します。
ここでは、アノテーション @XlsHorizontalRecords と異なる部分を説明します。 共通の使い方は、アノテーション @XlsHorizontalRecords の説明を参照してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | // シート用クラス
@XlsSheet(name="Weather")
public class SampleSheet {
@XlsVerticalRecords(tableLabel="天気情報")
private List<WeatherRecord> records;
}
// レコード用クラス
public class WeatherRecord {
@XlsColumn(columnName="時間")
private String time;
@XlsColumn(columnName="降水")
private double precipitation;
}
|
表の名称位置の指定¶
実際に表を作る場合、垂直方向ですが表の名称は上方に設定することが一般的です。
そのような場合、属性 tableLabelAbove
の値を true
に設定すると表のタイトルが上方に位置するとして処理します。 [ver1.0+]
1 2 3 4 5 6 | @XlsSheet(name="Users")
public class SampleSheet {
@XlsVerticalRecords(tableLabel="天気情報", tableLabelAbove=true)
private List<WeatherRecord> records;
}
|
表の名称から開始位置が離れた場所にある場合(right)¶
表の名称が定義してあるセルの直後に表がなく離れている場合、属性 right
で表の開始位置が 右方向 にどれだけ離れているか指定します。 [ver1.0]+
アノテーション @XlsHorizontalRecords の属性 bottom
と同じような意味になります。
1 2 3 4 5 6 | @XlsSheet(name="Users")
public class SampleSheet {
@XlsVerticalRecords(tableLabel="天気情報", right=3)
private List<WeatherRecord> records;
}
|
表の名称から開始位置が離れた場所にある場合(bottom)¶
属性 tableLabelAbove
の値が true
のときのみ有効になります。
表の名称がセルの直後に表がなく離れている場合、属性 bottom
で表の開始位置が 下方向 にどれだけ離れているか指定します。 [ver2.0]+
アノテーション @XlsHorizontalRecords の属性 bottom
と同じような意味になります。
1 2 3 4 5 6 | @XlsSheet(name="Users")
public class SampleSheet {
@XlsVerticalRecords(tableLabel="天気情報", tableLabelAbove=true, bottom=3)
private List<WeatherRecord> records;
}
|
表の見出しが横に結合されデータレコードの開始位置が離れた場所にある場合¶
表の見出しセルが横に結合され、データレコードの開始位置が離れている場合、属性 headerRight
でデータレコードの開始位置がどれだけ離れているか指定します。 [ver1.1+]
アノテーション @XlsHorizontalRecords の属性 headerBottom
と同じような意味になります。
下記の例の場合、見出しの「テスト結果」は横に結合されているため @XlsColumn(headerMerged=N) と組み合わせて利用します。
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 | // シート用クラス
@XlsSheet(name="Weather")
public class SampleSheet {
// 見出しが横に結合され、データのレコードの開始位置が離れている場合
@XlsVerticalRecords(tableLabel="天気情報", headerRight=2)
private List<WeatherRecord> records;
}
// レコード用クラス
public class WeatherRecord {
@XlsColumn(columnName="時間")
private String time;
// セル「降水」のマッピング
@XlsColumn(columnName="測定結果")
private double precipitation;
// セル「気温」のマッピング
// 結合されている見出しから離れている数を指定する
@XlsColumn(columnName="測定結果", headerMerged=1)
private int temperature;
// セル「天気」のマッピング
// 結合されている見出しから離れている数を指定する
@XlsColumn(columnName="測定結果", headerMerged=2)
private String wather;
}
|
書き込み時にレコードが不足、余分である場合の操作の指定¶
アノテーション @XlsRecordOption を指定することで、書き込み時のレコードの制御を指定することができます。
属性
overOperation
で、書き込み時にJavaオブジェクトのレコード数に対して、シートのレコード数が足りないときの操作を指定します。ただし、
@XlsVerticalRecords
の場合、列の挿入を行うOverOperation#Insert
は使用できません。
属性
remainedOperation
で、書き込み時にJavaオブジェクトのレコード数に対して、シートのレコード数が余っているときの操作を指定します。ただし、
@XlsVerticalRecords
の場合、列の削除を行うRemainedOperation#Delete
は使用できません。
1 2 3 4 5 6 7 8 | @XlsSheet(name="Users")
public class SampleSheet {
@XlsVerticalRecords(tableLabel="天気情報")
@XlsRecordOption(overOperation=OverOperation.Copy, remainedOperation=RemainedOperation.Clear)
private List<WeatherRecord> records;
}
|
任意の位置からレコードが開始するかを指定する場合¶
データレコードの途中で中見出しがあり、分割されているような表の場合、アノテーション @XlsRecordFinder で、レコードの開始位置を決める処理を指定することができます。 [ver2.0+]
属性
value
で、レコードの開始位置を検索する実装クラスを指定します。属性
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 | // マッピングの定義
@XlsSheet(name="Weather")
public class SampleSheet {
@XlsOrder(1)
@XlsVerticalRecords(tableLabel="天気情報", tableLabelAbove=true, terminal=RecordTerminal.Border, terminateLabel="/{0-9}月{0-9}[1-2]日/")
@XlsRecordFinder(value=DateRecordFinder.class, args="2月1日")
private List<WeatherRecord> date1;
@XlsOrder(2)
@XlsVerticalRecords(tableLabel="天気情報", tableLabelAbove=true, terminal=RecordTerminal.Border, terminateLabel="/{0-9}月{0-9}[1-2]日/")
@XlsRecordFinder(value=DateRecordFinder.class, args="2月1日")
private List<WeatherRecord> date2;
}
// 日にち用の見出しのレコードを探すクラス
public class DateRecordFinder implements RecordFinder {
@Override
public CellPosition find(ProcessCase processCase, String[] args, Sheet sheet,
CellPosition initAddress, Object beanObj, Configuration config) {
// 実装は省略
}
}
|