天天看點

使用POI批量導出檔案

業務場景:

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