SpringBoot動態生成多個Excel文件以壓縮包.zip格式下載


項目場景

項目中有個數據導出excel的需求,而且是批量,那么就要打包咯

解決步驟

基本實現如下:

  1. 生成文件
  2. 保存到臨時目錄 || 緩存到內存中
  3. 將文件打包下載

我不想廢話了,上代碼:

直接把文件輸出流放到壓縮流ZipOutputStream

 List<String> fields = new ArrayList<>();         fields.add("字段1");         fields.add("字段2");         fields.add("字段3");         HSSFWorkbook workbook = excelUtil.getNewExcel("壓縮文件測試", fields);         try {             response.setContentType("application/zip; charset=UTF-8");             //返回客戶端瀏覽器的版本號、類型             String agent = request.getHeader("USER-AGENT");             String downloadName = "壓縮文件測試.zip";             //針對IE或者以IE為內核的瀏覽器:             if (agent.contains("MSIE") || agent.contains("Trident")) {                 downloadName = java.net.URLEncoder.encode(downloadName, "UTF-8");             } else {                 downloadName = new String(downloadName.getBytes("UTF-8"), "ISO-8859-1");             }             response.setHeader("Content-disposition", "attachment;filename=" + downloadName);                 ZipOutputStream zipOutputStream = new ZipOutputStream(response.getOutputStream());    //多個從這里就可遍歷了    // --start             ZipEntry entry = new ZipEntry("第一個文件名.xls");             zipOutputStream.putNextEntry(entry);             ByteOutputStream byteOutputStream = new ByteOutputStream();             workbook.write(byteOutputStream);             byteOutputStream.writeTo(zipOutputStream); //            zipOutputStream.write(workbook.getBytes());             byteOutputStream.close();             zipOutputStream.closeEntry();             // --end             zipOutputStream.close();         } catch (IOException e) {             e.printStackTrace();         } 

生成excel文件也貼一下,如下:

public static HSSFWorkbook getNewExcel(String formName, List<String> fields) {         //新建excel對象         HSSFWorkbook workbook = new HSSFWorkbook();         //新建工作表         HSSFSheet sheet = workbook.createSheet(formName);         // 設置表格默認列寬度為20個字節         sheet.setDefaultColumnWidth((short) 20);         // 生成一個樣式         HSSFCellStyle style = workbook.createCellStyle();         // 生成一個字體         HSSFFont font = workbook.createFont();         font.setFontHeightInPoints((short) 12);         //字體應用到當前樣式         style.setFont(font);         //創建表格行         HSSFRow row = sheet.createRow(0);         //設置表單名稱         row.createCell(0).setCellValue(formName);         if (fields.size() - 1 > 0) {             //合並單元格             sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, fields.size() - 1));         }         HSSFRow row1 = sheet.createRow(sheet.getLastRowNum() + 1);         //設置列標題行         for (int i = 0; i < fields.size(); i++) {             row1.createCell(i).setCellValue(fields.get(i));         }         return workbook;     }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM