(解決)easypoi模板導出多個excel文件並壓縮
- 2021 年 1 月 14 日
- 筆記
easypoi版本——3.1.0
實現程式碼
public void export(HttpServletResponse response, HttpServletRequest request, ModelMap modelMap) {
try {
String fileName = "批量導出.zip";
response.setContentType("application/octet-stream ");
response.setHeader("Connection", "close"); // 表示不能用瀏覽器直接打開
response.setHeader("Accept-Ranges", "bytes");// 告訴客戶端允許斷點續傳多執行緒連接下載
response.setHeader("Content-Disposition",
"attachment;filename=" + new String(fileName.getBytes("GB2312"), "ISO8859-1"));
response.setCharacterEncoding("UTF-8");
OutputStream out = response.getOutputStream();
ZipOutputStream zos = new ZipOutputStream(out);
//讀取路徑下的模板
TemplateExportParams params = new TemplateExportParams("導出模板.xlsx");
//獲取業務數據邏輯
List<HashMap<String, Object>> exportList = new ArrayList<>();
//循環導出
for (HashMap<String, Object> map : exportList) {
//導出的文件名稱
String entryName = (String) map.get("title") + ".xlsx";
ZipEntry entry = new ZipEntry(entryName);
//easypoi導出excel文件
Workbook workbook = ExcelExportUtil.exportExcel(params, map);
//編寫新的zip條目,並將流定位到條目數據的開頭
zos.putNextEntry(entry);
//workBook.write會指定關閉數據流,直接用workbook.write(zos),下次就會拋出zos已被關閉的異常,所以用ByteArrayOutputStream來拷貝一下。
ByteArrayOutputStream bos = new ByteArrayOutputStream();
//workbook寫入bos
workbook.write(bos);
//bos寫入zos
bos.writeTo(zos);
zos.closeEntry();
}
if(zos != null) {
zos.flush();
zos.close();
}
}
catch (Exception e) {
e.printStackTrace();
}
}
後語
希望上述程式碼能對你有用。
