DBからのマスタ情報の大量のデータ出力を想定して
SXSSFWorkbookを利用する。
テンプレートの1行目を読込、タイトルとして文字情報のみ取得しています。
catchの処理が古くさいのは古いJDKで実装しているためです。
public boolean downloadExcelFile(HttpServletResponse response, String filename, ResultSet resultSet){
//一部割愛
// 新規EXCELファイルを作成
FileInputStream fi = null;
int lineFeedInsCnt = 1;
XSSFWorkbook templatewb = null;
SXSSFWorkbook wb = null;
try {
fi = new FileInputStream(filePath);
templatewb = new XSSFWorkbook(fi);
Sheet templateSheet = templatewb.getSheetAt(0);
wb = new SXSSFWorkbook();
Sheet sheet1 = wb.createSheet();
row = sheet1.createRow((short) 0);
Row templateRow = templateSheet.getRow(0);
int cellcount = 0;
for (Cell cell : templateRow) {
row.createCell(cellcount).setCellValue(getStr(cell));
cellcount++;
}
while (resultSet.next()) {
row = sheet1.createRow((short) lineFeedInsCnt);
for (int i = 0; i < resultSet.getMetaData().getColumnCount(); i++) {
row.createCell(i).setCellValue(getStr(resultSet.getString(i + 1)));
}
lineFeedInsCnt++;
}
wb.write(response.getOutputStream());
} catch (IOException e) {
log.error(e.getMessage(), e);
throw e;
} catch (EncryptedDocumentException e) {
log.error(e.getMessage(), e);
throw e;
} catch (SQLException e) {
log.error(e.getMessage(), e);
throw e;
} finally {
if (templatewb != null) {
try {
templatewb.close();
} catch (Exception e) {
//処理なし
}
}
if (wb != null) {
try {
wb.dispose();
} catch (Exception e) {
//処理なし
}
}
if (fi != null) {
try {
fi.close();
} catch (IOException e) {
//処理なし
}
}
try {
response.getOutputStream().close();
} catch (IOException e) {
//処理なし
}
}
return true; }

