<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 6775字,需瀏覽 14分鐘

           ·

          2021-05-07 16:37

          點擊上方 好好學(xué)java ,選擇 星標 公眾號

          重磅資訊,干貨,第一時間送達

          今日推薦:推薦19個github超牛逼項目!


          個人原創(chuàng)100W +訪問量博客:點擊前往,查看更多


          來源:blog.csdn.net/qq_40437152/article/details/111411364

          前言

          文件下載的場景很多(還不是需求豐富嘛~),那么什么是動態(tài)生成文件呢,就是用戶選擇文件內(nèi)容,服務(wù)器端根據(jù)選擇的數(shù)據(jù)生成某個格式的文件然后下載到客戶端。單個嘛直接下載,多個打包下載咯!

          項目場景

          項目中有個數(shù)據(jù)導(dǎo)出excel的需求,而且是批量,那么就要打包咯

          解決步驟

          基本實現(xiàn)如下:

          1. 生成文件
          2. 保存到臨時目錄 || 緩存到內(nèi)存中
          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為內(nèi)核的瀏覽器:
                      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);
                  // 設(shè)置表格默認列寬度為20個字節(jié)
                  sheet.setDefaultColumnWidth((short20);
                  // 生成一個樣式
                  HSSFCellStyle style = workbook.createCellStyle();
                  // 生成一個字體
                  HSSFFont font = workbook.createFont();
                  font.setFontHeightInPoints((short12);
                  //字體應(yīng)用到當(dāng)前樣式
                  style.setFont(font);
                  //創(chuàng)建表格行
                  HSSFRow row = sheet.createRow(0);
                  //設(shè)置表單名稱
                  row.createCell(0).setCellValue(formName);
                  if (fields.size() - 1 > 0) {
                      //合并單元格
                      sheet.addMergedRegion(new CellRangeAddress(000, fields.size() - 1));
                  }
                  HSSFRow row1 = sheet.createRow(sheet.getLastRowNum() + 1);
                  //設(shè)置列標題行
                  for (int i = 0; i < fields.size(); i++) {
                      row1.createCell(i).setCellValue(fields.get(i));
                  }
                  return workbook;
              }

          一些實踐總結(jié),歡迎指正!

          推薦文章

          更多項目源碼


          瀏覽 77
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产精品九九视频 | 免费A级毛片在线播放不收费 | 国产一区二区免费播放 | 夜夜天天操| 各种三级爱爱视频 |