@XlsSheet
マッピング対象のシートを「シート番号」「シート名」「シート名に対する正規表現」のいずれかで指定します。
クラスに付与します。
1@XlsSheet(number=0)
2public class SampleSheet {
3 ...
4}
1@XlsSheet(name="Users")
2public class SampleSheet {
3 ...
4}
1@XlsSheet(regex="Users.+")
2public class SampleSheet {
3 ...
4}
シート名を正規表現で指定する場合
正規表現で指定する場合は、 XlsMapper#loadMultiple(...)
メソッドを用いることで、同じ形式の一致した複数シートの情報を一度に取得できます。
書き込み時は、複数のシートが一致する可能性があり、1つに特定できない場合があるため注意が必要です。
正規表現に一致するシートが1つしかない場合は、そのまま書き込みます。[ver0.5+]
正規表現に一致するシートが複数ある場合、アノテーション @XlsSheetName を付与したフィールドの値を元に決定します。 そのため、予めフィールドに設定しておく必要があります。
アノテーション @XlsSheetName を付与しているフィールドを指定し、その値に一致しなくても、正規表現に一致するシートが1つ一致すれば、そのシートに書き込まれます。[ver0.5+]
1@XlsSheet(regex="Sheet_[0-9]+")
2public class SampleSheet {
3
4 // シート名をマッピングするフィールド
5 @XlsSheetName
6 private String sheetName;
7 ...
8}
9
10
11// 正規表現による複数のシートを出力する場合。
12// 書き込み時に、シート名を設定して、一意に関連づけます。
13SampleSheet sheet1 = new SampleSheet();
14sheet1.sheetName = "Sheet_1"; // シート名の設定
15
16SampleSheet sheet2 = new SampleSheet();
17sheet2.sheetName = "Sheet_2"; // シート名の設定
18
19SampleSheet sheet3 = new SampleSheet();
20sheet3.sheetName = "Sheet_3"; // シート名の設定
21
22// 複数のシートの書き込み
23XlsMapper xlsMapper = new XlsMapper();
24xlsMapper.saveMultiple(new FileInputStream("template.xls"),
25 new FileOutputStream("out.xls"),
26 new Object[]{sheet1, sheet2, sheet3}
27);
動的に書き込むシート数が変わるような場合は、下記のように、テンプレート用のシートをコピーしてから処理を行います。
1// 正規表現による複数のシートを出力する場合。
2// 書き込み時に、シート名を設定して、一意に関連づけます。
3SampleSheet sheet1 = new SampleSheet();
4sheet1.sheetName = "Sheet_1"; // シート名の設定
5
6SampleSheet sheet2 = new SampleSheet();
7sheet2.sheetName = "Sheet_2"; // シート名の設定
8
9SampleSheet sheet3 = new SampleSheet();
10sheet3.sheetName = "Sheet_3"; // シート名の設定
11
12SampleSheet[] sheets = new SampleSheet[]{sheet1, sheet2, sheet3};
13
14// シートのクローン
15Workbook workbook = WorkbookFactory.create(new FileInputStream("template.xlsx"));
16Sheet templateSheet = workbook.getSheet("XlsSheet(regexp)");
17for(SampleSheet sheetObj : sheets) {
18 int sheetIndex = workbook.getSheetIndex(templateSheet);
19 Sheet cloneSheet = workbook.cloneSheet(sheetIndex);
20 workbook.setSheetName(workbook.getSheetIndex(cloneSheet), sheetObj.sheetName);
21}
22
23// コピー元のシートを削除する
24workbook.removeSheetAt(workbook.getSheetIndex(templateSheet));
25
26// クローンしたシートファイルを、一時ファイルに一旦出力する。
27File cloneTemplateFile = File.createTempFile("template", ".xlsx");
28workbook.write(new FileOutputStream(cloneTemplateFile));
29
30// 複数のシートの書き込み
31XlsMapper xlsMapper = new XlsMapper();
32xlsMapper.saveMultiple(
33 new FileInputStream(cloneTemplateFile), // クローンしたシートを持つファイルを指定する
34 new FileOutputStream("out.xlsx"),
35 sheets);