@XlsSheet

マッピング対象のシートを「シート番号」「シート名」「シート名に対する正規表現」のいずれかで指定します。

クラスに付与します。

シート番号で指定する場合
1
2
3
4
@XlsSheet(number=0)
public class SampleSheet {
    ...
}
シート名で指定する場合
1
2
3
4
@XlsSheet(name="Users")
public class SampleSheet {
    ...
}
シート名を正規表現で指定する場合
1
2
3
4
@XlsSheet(regex="Users.+")
public class SampleSheet {
    ...
}

シート名を正規表現で指定する場合

正規表現で指定する場合は、 XlsMapper#loadMultiple(...) メソッドを用いることで、同じ形式の一致した複数シートの情報を一度に取得することができます。

書き込み時は、複数のシートが一致する可能性があり、1つに特定できない場合があるため注意が必要です。

  • 正規表現に一致するシートが1つしかない場合は、そのまま書き込みます。[ver0.5+]

  • 正規表現に一致するシートが複数ある場合、アノテーション @XlsSheetName を付与したフィールドの値を元に決定します。 そのため、予めフィールドに設定しておく必要があります。

  • アノテーション @XlsSheetName を付与しているフィールドを指定し、その値に一致しなくても、正規表現に一致するシートが1つ一致すれば、そのシートに書き込まれます。[ver0.5+]

 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(regex="Sheet_[0-9]+")
public class SampleSheet {

    // シート名をマッピングするフィールド
    @XlsSheetName
    private String sheetName;
    ...
}


// 正規表現による複数のシートを出力する場合。
// 書き込み時に、シート名を設定して、一意に関連づけます。
SampleSheet sheet1 = new SampleSheet();
sheet1.sheetName = "Sheet_1"; // シート名の設定

SampleSheet sheet2 = new SampleSheet();
sheet2.sheetName = "Sheet_2"; // シート名の設定

SampleSheet sheet3 = new SampleSheet();
sheet3.sheetName = "Sheet_3"; // シート名の設定

// 複数のシートの書き込み
XlsMapper xlsMapper = new XlsMapper();
xlsMapper.saveMultiple(new FileInputStream("template.xls"),
    new FileOutputStream("out.xls"),
    new Object[]{sheet1, sheet2, sheet3}
);

動的に書き込むシート数が変わるような場合は、下記のように、テンプレート用のシートをコピーしてから処理を行います。

 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
32
33
34
35
// 正規表現による複数のシートを出力する場合。
// 書き込み時に、シート名を設定して、一意に関連づけます。
SampleSheet sheet1 = new SampleSheet();
sheet1.sheetName = "Sheet_1"; // シート名の設定

SampleSheet sheet2 = new SampleSheet();
sheet2.sheetName = "Sheet_2"; // シート名の設定

SampleSheet sheet3 = new SampleSheet();
sheet3.sheetName = "Sheet_3"; // シート名の設定

SampleSheet[] sheets = new SampleSheet[]{sheet1, sheet2, sheet3};

// シートのクローン
Workbook workbook = WorkbookFactory.create(new FileInputStream("template.xlsx"));
Sheet templateSheet = workbook.getSheet("XlsSheet(regexp)");
for(SampleSheet sheetObj : sheets) {
    int sheetIndex = workbook.getSheetIndex(templateSheet);
    Sheet cloneSheet = workbook.cloneSheet(sheetIndex);
    workbook.setSheetName(workbook.getSheetIndex(cloneSheet), sheetObj.sheetName);
}

// コピー元のシートを削除する
workbook.removeSheetAt(workbook.getSheetIndex(templateSheet));

// クローンしたシートファイルを、一時ファイルに一旦出力する。
File cloneTemplateFile = File.createTempFile("template", ".xlsx");
workbook.write(new FileOutputStream(cloneTemplateFile));

// 複数のシートの書き込み
XlsMapper xlsMapper = new XlsMapper();
xlsMapper.saveMultiple(
        new FileInputStream(cloneTemplateFile), // クローンしたシートを持つファイルを指定する
        new FileOutputStream("out.xlsx"),
        sheets);