@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);