优秀的编程知识分享平台

网站首页 > 技术文章 正文

以压缩包的方式下载excel(压缩excel文件的软件)

nanyue 2025-06-24 15:42:36 技术文章 3 ℃
/**
     * 以压缩包的方式下载excel
     * @param response     响应
     * @param workbookMap
     * @param zipName     压缩包名称
     * @throws Exception
     */
    public static void downloadExcelForZip(HttpServletResponse response, Map<String, XSSFWorkbook> workbookMap, String zipName) throws Exception {
        ZipOutputStream out = null;
        try {
            response.setContentType("application/*");
            response.setHeader("Content-Disposition", "attachment;filename=" + new String(zipName.getBytes("gb2312"), "ISO8859-1"));
            out = new ZipOutputStream(response.getOutputStream());
            for (String fileName : workbookMap.keySet()) {
                XSSFWorkbook workbook = workbookMap.get(fileName); 
                //创建一个新的ZIP条目,文件名由fileName指定
                ZipEntry zipEntry = new ZipEntry(fileName);
                //将新创建的ZIP条目写入ZIP输出流,表示即将写入该条目对应的数据
                out.putNextEntry(zipEntry);
                //由于workbook.write()方法在写入完成后会关闭底层的输出流,因此不能直接将工作簿写入ZIP输出流out
                //为了避免流被提前关闭,代码使用ByteArrayOutputStream作为中间缓冲,先将工作簿写入内存,再将内存中的数据写入ZIP流
                ByteArrayOutputStream bos = new ByteArrayOutputStream();
                workbook.write(bos);
                bos.writeTo(out);
                out.closeEntry();
            }
            out.flush();
        } catch (Exception e) {
            throw new ServletException("下载文件异常" + e.getMessage());
        } finally {
            if (out != null) {
                out.close();
            }
        }
    }

Tags:

最近发表
标签列表