精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

EasyExcel進階之一個填充模版動態生成多個Sheet頁

開發 架構
EasyExcel單獨是無法實現一個模版動態填充多個Sheet頁,所以我們使用POI來幫忙復制Sheet頁即可!

一、前言

今天收到一個導出Excel的需求,這種需求經常做,看到模版還是是有點復雜的有頭有行,一般的導出是不好做,使用模板填充比較簡單!另外還有一個需求小編是第一次見,所以來記錄一下,為后來人鋪路!

需求:導出有單子的頭信息和一些多個行信息,前端可以多選,「多個放在一個excel里的sheet中」

明白了需求我們技術選型,現在基本都是EasyExcel用的比較多,今天使用的版本為:3.1.5,低版本已經不維護,建議使用高點的版本哈!

「在這里先說一下,EasyExcel單獨是無法實現一個模版動態填充多個sheet頁,所以我們使用POI來幫忙復制sheet頁即可!」

二、準備工作

1、閹割版效果圖

我簡化了一些功能,自己做了一個簡單的模板,但是功能都是有的,大致如下圖所示:

「多個就使用合同號作為sheet名稱,每個里面也會有多個行垂直填充即可!」

2、填充模版

3、導入依賴

中間使用了Hutool來獲取流,很多公司不讓使用Hutool的,大家自己選擇,不使用可以用:

  • Spring的ResourceUtils.getFile()
  • JDK的new File()

本次使用Hutool的ClassPathResource。

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.1.5</version>
</dependency>
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.4</version>
</dependency>

4、導出實體

/**
 * @author wangzhenjun
 * @date 2023/7/4 17:09
 */
@Data
public class TestExcel {

    private String contractNo;

    private String address;
    
 private String dateTime;

    private List<Item> itemList;

    @Data
    public static class Item{

        private String name;

        private BigDecimal price;
    }
}

三、實戰代碼

為了方便直接寫在Controller里了,大家不要學習哈,業務的處理還是要在service里寫!

整體思路:

使用POI的XSSFWorkbook 來根據要導出的個數來進行「復制sheet頁」,名稱為合同號

將復制好的sheet頁轉換成字節數組,然后再通過輸入流的方式讀取字節數組中的數據。

EasyExcel 將使用輸入流中的模板數據生成 Excel 數據,并將生成的 Excel 文件寫入到 HttpServletResponse 的輸出流中,以便將其發送給客戶端進行下載或其他處理。

創建一個 WriteSheet 對象,并將其與上面復制的sheet頁名稱關聯,就可以往里面填充數據了!

如果有這種list多個行填充的并且list不是最后一行,下面還有數據需要填充 就必須設置 forceNewRow=true

不加的話會把你后面的內容給覆蓋了!

但是這個就會把所有數據放到內存 會很耗內存!

「用完記得把流關閉哈!」

@SneakyThrows
@GetMapping("/excel")
public void excel (HttpServletResponse response){
    int size = 2;
    List<TestExcel> testExcels = new ArrayList<>();
    for (int i = 0; i < size; i++) {
        TestExcel testExcel = new TestExcel();
        testExcel.setContractNo("HT07040" + (i + 1));
        testExcel.setAddress("青島" + i + "號基地");
        testExcel.setDateTime("2023-07-05");
        testExcels.add(testExcel);
        List<TestExcel.Item> itemList = new ArrayList<>();
        for (int j = 0; j < size; j++) {
            TestExcel.Item item = new TestExcel.Item();
            item.setName("商品" + (j + 1));
            item.setPrice(new BigDecimal("188").multiply(new BigDecimal(j + 1)));
            itemList.add(item);
        }
        testExcel.setItemList(itemList);
    }
    response.setCharacterEncoding("utf-8");
    String fileName = URLEncoder.encode("測試", "UTF-8").replaceAll("\\+", "%20");
    response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
    ClassPathResource classPathResource = new ClassPathResource("template" + File.separator + "測試.xlsx");
    InputStream stream = classPathResource.getStream();
    // 把excel流給這個對象,后續可以操作
    XSSFWorkbook workbook = new XSSFWorkbook(stream);
    // 設置模板的第一個sheet的名稱,名稱我們使用合同號
    workbook.setSheetName(0, testExcels.get(0).getContractNo());
    for (int i = 1; i < size; i++) {
        // 剩余的全部復制模板sheet0即可
        workbook.cloneSheet(0, testExcels.get(i).getContractNo());
    }
    // 把workbook寫到流里
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    workbook.write(baos);
    byte[] bytes = baos.toByteArray();
    stream = new ByteArrayInputStream(bytes);
    ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(stream).build();

    for (TestExcel testExcel : testExcels) {
        WriteSheet writeSheet = EasyExcel.writerSheet(testExcel.getContractNo()).build();
        // list不是最后一行,下面還有數據需要填充 就必須設置 forceNewRow=true 但是這個就會把所有數據放到內存 會很耗內存
        FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).direction(WriteDirectionEnum.VERTICAL).build();
        excelWriter.fill(testExcel, writeSheet);
        excelWriter.fill(new FillWrapper("item", testExcel.getItemList()), fillConfig, writeSheet);
    }
    excelWriter.finish();
    baos.close();
    stream.close();
}

四、總結

這樣就完成了,主要的難點是復制sheet頁,多行填充在EasyExcel官網都是有的,還有一些我這邊沒有用到的東西,大家可以根據自己的需求去找找看!

EasyExcel填充地址:https://easyexcel.opensource.alibaba.com/docs/current/quickstart/fill。

責任編輯:姜華 來源: 小王博客基地
相關推薦

2013-05-02 10:40:24

xcode

2013-06-03 15:38:16

iOS開發iOS SDK動態Action Sh

2018-03-21 08:19:11

中心化存儲網絡

2010-10-09 13:41:42

MySQL字符串

2009-08-18 13:35:08

C#動態生成Word文

2019-12-23 09:13:11

Python數據語言

2013-12-05 10:50:13

2022-05-07 15:44:45

eTS 開發鴻蒙

2021-05-17 14:10:29

MySQLSQLServer

2017-03-16 08:46:43

TensorFlow安裝入門

2020-10-13 10:49:23

APPAndiroid終端

2014-05-23 10:37:37

聊天程序PHP聊天程序

2022-12-28 08:17:36

數據庫數據導出

2021-04-13 17:40:55

微服務架構模式

2023-08-31 22:05:02

SAN環境存儲

2021-03-08 00:08:29

Vue應用掛載

2023-02-15 09:34:20

公共字段mybatis變量

2011-04-20 11:34:07

SQL字符串分割

2013-12-04 14:31:28

微軟Windows未來

2021-03-22 10:20:04

Python元類代碼
點贊
收藏

51CTO技術棧公眾號

久久久久久久久中文字幕| 久久激情中文| 在线看国产一区二区| 久久久精品动漫| 日韩免费观看一区二区| 一区二区美女| 在线观看国产精品网站| 日韩一区国产在线观看| 91在线精品入口| 68国产成人综合久久精品| 日韩欧美福利视频| 国产丝袜欧美中文另类| 91精品国产美女浴室洗澡无遮挡| 国产精品一 二 三| 日韩少妇裸体做爰视频| 国产一区二区三区日韩精品| 在线观看91精品国产麻豆| 欧美日韩一区不卡| 一区二区三区视频| 日本人妻丰满熟妇久久久久久| 欧美+日本+国产+在线a∨观看| 亚洲精品乱码久久久久久金桔影视| 男人日女人视频网站| 国产永久av在线| 国产成人亚洲综合a∨猫咪| 久久久久久久久久亚洲| 美国黑人一级大黄| 日本国产欧美| 午夜精品123| 欧美 日韩 国产 在线观看| 国产精品玖玖玖| 一区二区三区国产在线| 国产亚洲日本欧美韩国| 丰满熟女人妻一区二区三区| 亚洲同志男男gay1069网站| 亚洲欧美另类小说| 久久精品五月婷婷| 肉色超薄丝袜脚交| 黄视频免费在线看| 中文字幕欧美国产| 精品国产乱码久久久久久郑州公司| 亚洲国产无线乱码在线观看| 亚洲最黄网站| 久久久激情视频| 97精品国产91久久久久久| 丁香激情五月少妇| 欧美巨大xxxx| 51久久夜色精品国产麻豆| 黄页网站在线观看视频| 成人三级网址| 国产精品久久久久婷婷二区次| 成人中文字幕+乱码+中文字幕| 特一级黄色大片| 亚洲一级影院| 欧美精品在线看| 黄色精品视频在线观看| 青青一区二区三区| 亚洲欧洲高清在线| 大黑人交xxx极品hd| 北条麻妃一区二区三区在线观看| 欧美一级黄色片| 青娱乐自拍偷拍| 天堂影院在线| 99热99精品| 久久久999视频| 中文在线资源天堂| 国产精品美女久久久浪潮软件| 国产丝袜一区视频在线观看 | 亚洲自拍偷拍九九九| 日韩亚洲欧美中文三级| 日本在线xxx| 国产色播av在线| 精品久久久久久中文字幕| 男人日女人视频网站| 九色porny丨入口在线| 亚洲激情成人在线| 日本免费a视频| av中文在线资源| 亚洲三级在线播放| 久久久成人精品一区二区三区| 免费在线观看av片| 中文字幕亚洲综合久久菠萝蜜| av动漫免费观看| 含羞草www国产在线视频| 亚洲精品欧美综合四区| 大胆欧美熟妇xx| 免费毛片在线看片免费丝瓜视频| 亚洲欧美综合在线精品| 2021狠狠干| 欧美家庭影院| 亚洲国产欧美在线人成| 国产男女无遮挡| 欧美最新精品| 欧美丰满美乳xxx高潮www| 亚洲色图欧美自拍| 成人自拍在线| 亚洲欧美激情精品一区二区| 人妻丰满熟妇av无码久久洗澡| 欧美日韩看看2015永久免费| 亚洲乱码国产乱码精品精天堂| 欧美 日韩 成人| 国产精品国产三级国产在线观看| 久久久精品一区| 久久夜色精品亚洲| 秋霞午夜鲁丝一区二区老狼| 亚洲一区二区三区在线视频 | 国产原创精品视频| 亚洲线精品一区二区三区八戒| 看av免费毛片手机播放| 日本在线观看高清完整版| 亚洲成人免费电影| 熟女性饥渴一区二区三区| 国产精品传媒麻豆hd| 日韩欧美一二三| 亚洲天堂视频一区| 亚洲成av人片乱码色午夜| 最近2019年中文视频免费在线观看| 无码人妻丰满熟妇区五十路百度| 欧亚av在线| 欧美中文字幕亚洲一区二区va在线| 999在线精品视频| 麻豆精品少妇| 一区二区三区黄色| 黄上黄在线观看| 欧美日韩亚洲一区| 91精品国产乱码久久久久久蜜臀 | 久久99精品一区二区三区| 精品国产福利视频| 国产激情在线观看视频| 91成人app| 国产视频亚洲视频| 色婷婷在线视频观看| 欧美韩国一区| 日韩av电影在线网| 亚洲精品一区二区口爆| 久久久国产精品午夜一区ai换脸| 国产人妻人伦精品| 成人国产在线| 欧美一级在线观看| 男人天堂av电影| 亚洲天堂男人| 91久久精品国产91久久| 户外极限露出调教在线视频| 夜夜嗨av一区二区三区中文字幕| 91丨九色丨蝌蚪| 色婷婷综合久久久久久| 欧美激情xxxxx| 国产又粗又猛又黄| 国产午夜精品一区二区三区视频 | 亚洲综合成人av| jizz一区二区| 91香蕉视频网址| 日韩在线观看不卡| 精品丝袜一区二区三区| 免看一级a毛片一片成人不卡| 视频一区二区欧美| 欧美连裤袜在线视频| 极品在线视频| 精品国产一区a| 极品魔鬼身材女神啪啪精品| 肉丝袜脚交视频一区二区| 成人欧美一区二区| 国产区美女在线| 日韩精品一区二区三区swag| 精品国产视频在线观看| 久久久人人人| 国产精品久久综合av爱欲tv| 玖玖综合伊人| 日本韩国欧美国产| 免费黄色在线视频| 亚洲美女黄网| 精品乱色一区二区中文字幕| 9i看片成人免费高清| 亚洲色图偷窥自拍| 国产精华7777777| 国产精品视频麻豆| 天堂av在线网站| 亚洲综合婷婷| 99免费在线观看视频| 欧美69精品久久久久久不卡| 91精品国偷自产在线电影| 国产精品最新在线观看| 成人高清免费在线播放| 欧美日韩精品综合在线| 亚洲精品卡一卡二| 国内不卡的二区三区中文字幕| 色撸撸在线观看| 成人影院av| 在线观看精品一区| 免费成人深夜天涯网站| 久久精品99久久久| 国产精品一区二区在线观看 | 成人影视免费观看| 国产丝袜美腿一区二区三区| 95av在线视频| 免费a级在线播放| 欧美无砖砖区免费| 精品成人影院| 国产乱妇无码大片在线观看| 国产精品日韩一区二区免费视频| 免费人成在线观看播放视频 | 国精品无码人妻一区二区三区| 国一区二区在线观看| 91精品天堂| 成人爽a毛片免费啪啪| 色噜噜国产精品视频一区二区 | 国产精品99久久久久久人| 最近高清中文在线字幕在线观看| 欧美一区二区三区性视频| 日韩xxxxxxxxx| 91美女精品福利| 尤物国产在线观看| 亚洲国产导航| 亚洲蜜桃av| 日本在线中文字幕一区| 国产精品视频久| 1区2区在线| 久久精品这里热有精品| 午夜国产在线观看| 9191久久久久久久久久久| 韩国av中文字幕| 亚洲美女视频在线观看| 日本丰满少妇裸体自慰| 激情丁香综合五月| 黄色高清无遮挡| 欧美人成在线| 婷婷亚洲婷婷综合色香五月| 国产成人一二片| 成人精品久久av网站| 一本大道色婷婷在线| 萌白酱国产一区二区| 欧美欧美欧美| 日韩精品在线网站| 久久人人爽人人爽人人片av免费| 国产精品美女久久久久aⅴ| 在线天堂www在线国语对白| 国模娜娜一区二区三区| 亚洲一区二区蜜桃| 国产农村妇女精品一区二区| 成人小视频在线观看免费| 天天天综合网| 婷婷五月色综合| 国语产色综合| 免费在线成人av电影| 精品嫩草影院| 97av影视网在线观看| 成人国产精品入口免费视频| 日本精品久久久久影院| 黄视频网站在线观看| 久久视频国产精品免费视频在线| www.av在线播放| 日韩一区二区精品在线观看| 91精品国产乱码久久久久| 欧美亚洲国产怡红院影院| 日本a级c片免费看三区| 亚洲曰韩产成在线| 免费成年人视频在线观看| 中文字幕不卡一区| mm131美女视频| 91美女视频网站| 极品人妻一区二区三区| 久久网这里都是精品| a视频免费观看| 91亚洲精品一区二区乱码| 韩国三级hd两男一女| youjizz国产精品| 一级黄色免费视频| 国产盗摄女厕一区二区三区| 天堂va欧美va亚洲va老司机| 丰满白嫩尤物一区二区| 色天使在线观看| 日本不卡一二三区黄网| 亚洲欧美自拍偷拍| 国产一区二区无遮挡| 黑人巨大精品| 国产www精品| 无码小电影在线观看网站免费| 91国产精品91| 亚洲成人激情社区| 国产精品视频99| 日韩中文影院| 91成人国产在线观看| 国产精品av一区二区三区| 91福利视频网| 99亚洲伊人久久精品影院| 成人免费视频a| 亚洲人成网站在线在线观看| 91视频免费在线观看| 激情小说一区| 欧美日韩一区二区三区免费| 99热国内精品永久免费观看| 日本免费成人网| 国产精品啊啊啊| av黄色在线网站| 蜜桃av一区二区在线观看| 日本一二三区在线| 91片黄在线观看| 亚洲一级片在线播放| 亚洲精品国产一区二区精华液| 亚洲国产综合久久| 欧美无乱码久久久免费午夜一区| 国产裸体永久免费无遮挡| 精品国产区一区| 黄色免费在线播放| 久久精品国产69国产精品亚洲| 国产美女情趣调教h一区二区| 久久久视频在线| 羞羞视频在线观看免费| 性色av一区二区三区| 欧美二区观看| 特级西西444www大精品视频| 亚洲综合日本| 大尺度在线观看| 亚洲欧美日韩在线不卡| 青青艹在线观看| 亚洲欧美一区二区三区情侣bbw| av中文字幕电影在线看| 亚洲最大福利网| 国产精品久久久久久久久妇女| 欧洲熟妇精品视频| 26uuu亚洲婷婷狠狠天堂| 五月天婷婷网站| 日韩欧美国产综合| 日本激情视频在线观看| 国产精品成人一区二区| 一区二区美女| 国产高清精品在线观看| 99精品视频一区二区| 亚洲国产成人精品综合99| 7777精品伊人久久久大香线蕉 | 99国产揄拍国产精品| 中文字幕亚洲一区二区三区五十路| 成人性教育av免费网址| 精品免费国产| 国产精品一页| 三级黄色片网站| 精品动漫一区二区| 少妇喷水在线观看| 97视频在线观看免费高清完整版在线观看| 最新精品在线| 丰满的少妇愉情hd高清果冻传媒| 国产999精品久久久久久绿帽| 黄色a级片在线观看| 日韩亚洲欧美综合| 人妖欧美1区| 国产麻豆日韩| 国产日本精品| 一级做a爱视频| 亚洲柠檬福利资源导航| 亚洲视频久久久| 久久久国产一区二区| 日韩精品一区国产| 超碰成人免费在线| 不卡的av在线播放| 久久久www成人免费毛片| 精品国产露脸精彩对白 | 日韩免费特黄一二三区| 在线观看免费视频高清游戏推荐| 国产丝袜欧美中文另类| 一级黄色片在线观看| 日韩在线观看免费全集电视剧网站| 97色婷婷成人综合在线观看| 4444在线观看| 国产老肥熟一区二区三区| 国产奶水涨喷在线播放| 日韩成人在线观看| 欧美国产日韩电影| 亚洲精品中文字幕乱码三区不卡| 国产最新精品精品你懂的| 欧美日韩综合一区二区| 日韩欧美国产一区在线观看| 1234区中文字幕在线观看| 日韩精品久久一区二区三区| 国产综合色视频| 日韩三级一区二区三区| 亚洲日本成人女熟在线观看| 亚洲狼人在线| 男女激情无遮挡| 91丨porny丨户外露出| 91影院在线播放| 8x海外华人永久免费日韩内陆视频| 精品av一区二区| 好吊操视频这里只有精品| 日韩欧美在线免费观看| 国产精品久久久久久福利| 精品一区久久| 狠狠色综合播放一区二区| 免费在线不卡视频| 色偷偷av一区二区三区乱| 美女av一区| 亚洲第一天堂久久| 日韩欧美在线免费观看| 色呦呦在线观看视频| 久热这里只精品99re8久| 日韩黄色免费网站| 日本一区二区免费在线观看| 日韩中文字幕在线视频| 亚洲欧美日本伦理| 337p日本欧洲亚洲大胆张筱雨| 欧美性色欧美a在线播放|