業務場景:
導出所有站點的監測資料,要求每個站點導出為單獨的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) {
//代碼省略
}