1.将excel文件放入zip
private void addExcelToZip(FreightTemplatePagedQueryReq req,ZipOutputStream zipOut) throws IOException {
List<Workbook> workbooks = queryByFreightTemplateIds(req);
try {
for (int i = 0; i < workbooks.size(); i++) {
Workbook wb = workbooks.get(i);
Sheet sheetAt = wb.getSheetAt(0);
String stringCellValue = sheetAt.getRow(2).getCell(1).getStringCellValue();
// 将工作簿写入一个临时字节数组流
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
wb.write(byteArrayOutputStream);
// 将 Excel 文件添加到 ZIP 流中作为一个条目
//模板名称
ZipEntry zipEntry = new ZipEntry(stringCellValue + ".xlsx");
zipOut.putNextEntry(zipEntry);
zipOut.write(byteArrayOutputStream.toByteArray());
// 关闭 ZIP 条目ids
zipOut.closeEntry();
}
}finally {
// 关闭工作簿
for (Workbook wb : workbooks) {
wb.close();
}
}
}
2.将zip下载到本地
public void createFreightTemplateZip(FreightTemplatePagedQueryReq req,HttpServletResponse response) {
//获取当前时间的年月日时分秒
String currentDateTime = DateUtil.getCurrentDateTime();
try {
// 设置响应头信息
response.setContentType("application/zip");
response.setHeader("Content-Disposition", "attachment; filename="+"运费模板-"+currentDateTime+".zip");
// 获取响应输出流
ZipOutputStream zipOut = new ZipOutputStream(response.getOutputStream());
// 生成并将Excel文件添加到ZIP流中
addExcelToZip(req,zipOut);
// 关闭ZIP流
zipOut.close();
} catch (IOException e) {
e.printStackTrace();
}
}