SpringBootは、圧縮されたパッケージ.zip形式でダウンロードする複数のExcelファイルを動的に生成します

序文

ファイルのダウンロードには多くのシナリオがあります(需要が豊富ではありません〜)。したがって、動的に生成されるファイル、つまりユーザーがファイルのコンテンツを選択すると、サーバーは選択されたデータに従って特定の形式でファイルを生成します、次にそれをクライアントにダウンロードします。1つのコードを直接ダウンロードし、複数のパッケージをダウンロードしてください。

プロジェクトシーン

プロジェクトで優れたデータをエクスポートする必要があり、データはバッチであるため、パッケージ化する必要があります。

解決手順

基本的な実装は次のとおりです。

  1. makefile
  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;
    }

いくつかの実用的な要約、訂正することを歓迎します!

おすすめ

転載: blog.csdn.net/m0_63437643/article/details/123733570