javascript
SpringBoot动态生成多个Excel文件以压缩包.zip格式下载
來源:blog.csdn.net/qq_40437152/article/details/111411364
前言
文件下載的場景很多(還不是需求豐富嘛~),那么什么是動態生成文件呢,就是用戶選擇文件內容,服務器端根據選擇的數據生成某個格式的文件然后下載到客戶端。單個嘛直接下載,多個打包下載咯!
項目場景
項目中有個數據導出excel的需求,而且是批量,那么就要打包咯
解決步驟
基本實現如下:
生成文件
保存到臨時目錄 || 緩存到內存中
將文件打包下載
我不想廢話了,上代碼:
直接把文件輸出流放到壓縮流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());//多個從這里就可遍歷了//?--startZipEntry?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();//?--endzipOutputStream.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;}一些實踐總結,歡迎指正!
推薦文章2021 最新版 Spring Boot 速記教程
2W 字你全面認識 Nginx
47K Star 的SpringBoot+MyBatis+docker電商項目,附帶超詳細的文檔!
寫博客能月入10K?
一款基于 Spring Boot 的現代化社區(論壇/問答/社交網絡/博客)
這或許是最美的Vue+Element開源后臺管理UI
推薦一款高顏值的 Spring Boot 快速開發框架
一款基于 Spring Boot 的現代化社區(論壇/問答/社交網絡/博客)
13K點贊都基于 Vue+Spring 前后端分離管理系統ELAdmin,大愛
想接私活時薪再翻一倍,建議根據這幾個開源的SpringBoot項目
總結
以上是生活随笔為你收集整理的SpringBoot动态生成多个Excel文件以压缩包.zip格式下载的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java项目中如何更优雅的处理空值?
- 下一篇: 看看人家 SpringBoot + vu