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