业务场景:
导出所有站点的监测数据,要求每个站点导出为单独的excel。
代码实现思路:
每个站点的数据写入到单独的excel,保存到服务器,最后将所有excel压缩为一个zip文件,输出到response。
代码大体结构如下:
//导出功能入口
@RequestMapping(value="exportAll")
public void exportAll(String json, HttpServletResponse response) {
//查询数据库,获取所有站点的结果集,代码省略
//根据站点对总数据进行筛选,每个站点的数据放入单独的List中,代码省略
//定义Excel公共模板
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("sheet1");
//代码省略
while (迭代) {
//导出每个站点数据
writeToLocal(wb, sheet, cellStyle, dataDirFile, sitesData.get(siteName));
}
//所有站点文件生成后,开始生成压缩文件
File zip = new File(URLEncoder.encode(导出压缩文件名, "UTF-8") + ".zip");
zipFile(dataDirFile.listFiles(), zip);
//压缩文件输出流到response
response.setContentType("application/zip");
response.setHeader("Location",zip.getName());
response.setHeader("Content-Disposition", "attachment; filename=" + zip.getName());
//代码省略
//清除过程文件(数据文件和压缩文件)
clearExpFiles(指定路径);
}
//根据数据集合,在服务器生成excel
private void writeToLocal(HSSFWorkbook wb, HSSFSheet sheet, HSSFCellStyle cellStyle, File dataDirFile, List<实体类> dataList) {
//数据写入模板,保存到服务器,代码省略
}
//压缩指定文件
private void zipFile(File[] files, File zipfile) {
//使用ZipOutputStream,代码省略
}
//递归清空文件文件
private void clearExpFiles(String path) {
//代码省略
}