@XlsArrayCells
連続し隣接するセルをCollection(List, Set)または配列にマッピングします。 [ver.2.0+]
属性
column
、row
で、セルの位置をインデックスで指定します。columnは列番号で、0から始まります。
rowは行番号で、0から始まります。
属性
address
で、 'B3' のようにシートのアドレス形式で指定もできます。属性addressを指定する場合は、column, rowは指定しないでください。
属性addressの両方を指定した場合、addressの値が優先されます。
属性
direction
で、連続する隣接するセルの方向を指定します。列挙型
ArrayDirection
で、横方向(右方向)もしくは、直方向(下方向)を指定できます。初期値は、横方向(右方向)です。
属性
size
で、連続するセルの個数を指定します。Collection(List, Set)型または配列のフィールドに付与します。
List型などの場合、Genericsのタイプとして、マッピング先のクラスを指定します。
指定しない場合は、アノテーションの属性
elementClass
でクラス型を指定します。
1@XlsSheet(name="Users")
2public class SampleSheet {
3
4 // インデックス形式、横方向で指定する場合
5 // 属性directionを省略した場合は、ArrayDirection.Horizonを指定したと同じ意味。
6 @XlsArrayCells(column=0, row=0, size=6)
7 private List<String> nameKanas1;
8
9 // アドレス形式、配列にマッピング
10 @XlsArrayCells(address="A1", size=6, direction=ArrayDirection.Horizon)
11 private String[] nameKanas2;
12
13}
縦方向に隣接したセルをマッピングする場合
縦方向にマッピングするため、属性
direction
を、ArrayDirection.Vertical
に設定します。
1@XlsSheet(name="Users")
2public class SampleSheet {
3
4 // 縦方向の隣接するセル
5 // 属性direction=ArrayDirection.Verticalを指定すると、縦方向にマッピングします。
6 @XlsLabelledArrayCells(address="B3", direction=ArrayDirection.Vertical, size=4)
7 private List<String> names;
8}
結合したセルをマッピングする場合
属性
elementMerged
で、セルの結合を考慮するか指定します。trueのときは、結合されているセルを1つのセルとしてマッピングします。
falseの場合は、結合されていても解除した状態と同じマッピング結果となります。
ただし、falseのときは、書き込む際には結合が解除されます。
初期値はtrueであるため、特に意識はする必要はありません。
セルが結合されている場合は、結合後の個数を指定します。
1@XlsSheet(name="Users")
2public class SampleSheet {
3
4 // elementMerged=trueは初期値なので、省略可
5 @XlsArrayCells(address="B3", size=3, elementMerged=true)
6 private List<String> words;
7
8}
書き込み時に配列・リストのサイズが不足、または余分である場合
アノテーション @XlsArrayOption を指定することで、書き込み時のセルの制御を指定できます。
属性
overOperation
で、書き込み時にJavaオブジェクトの配列・リストのサイズに対して、属性size
の値が小さく、足りない場合の操作を指定します。属性
remainedOperation
で、書き込み時にJavaオブジェクトの配列・リストのサイズに対して、属性size
の値が大きく、余っている場合の操作を指定します。
1@XlsSheet(name="Users")
2public class SampleSheet {
3
4 @XlsArrayCells(address="B3", size=6)
5 @XlsArrayOption(overOperation=OverOperation.Error, remainedOperation=RemainedOperation.Clear)
6 private List<String> nameKana;
7}
位置情報/見出し情報を取得する際の注意事項
マッピング対象のセルのアドレスを取得する際に、フィールド Map<String, Point> positions
を定義しておけば、自動的にアドレスがマッピングされます。
通常は、キーにはプロパティ名が記述(フィールドの場合はフィールド名)が入ります。
アノテーション @XlsArrayCells
でマッピングしたセルのキーは、 <プロパティ名>[<インデックス>]
の形式になります。
インデックスは、0から始まります。
マッピング対象の見出しを取得する、フィールド Map<String, String> labels
は、見出しはないため取得することはできません。
1public class SampleRecord {
2
3 // 位置情報
4 private Map<String, Point> positions;
5
6 // 見出し情報
7 private Map<String, String> labels;
8
9 @XlsArrayCells(address="B3", size=6)
10 private List<String> nameKana;
11}
12
13// 位置情報・見出し情報へのアクセス
14SampleRecord record = /* レコードのインスタンスの取得 */;
15
16Point position = record.positions.get("nameKana[2]");
17
18// 見出しは存在しないので、nullが返される
19String label = recrod.labeles.get("nameKana[2]");