精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

在线a人片免费观看视频| 无码视频一区二区三区| 视频一区日韩| 亚洲国产综合色| 久久精品国产精品青草色艺| 91在线视频免费播放| 四虎成人av| 精品国产一区二区三区久久久蜜月| 午夜免费福利小电影| 成人动漫在线播放| 丁香亚洲综合激情啪啪综合| 欧美激情精品在线| 亚洲理论片在线观看| 精品麻豆剧传媒av国产九九九| 午夜视频在线观看一区二区三区 | 99久热在线精品视频观看| 亚洲影视在线播放| 亚洲精品成人三区| 少妇一区二区三区四区| 美国av一区二区| 韩国一区二区电影| 日本裸体美女视频| 色婷婷av一区二区三区丝袜美腿| 欧美日韩国产乱码电影| 国产伦精品一区二区三区四区视频_ | 高清国产一区| 中文字幕永久在线观看| 亚洲三级国产| 久久久91精品| 波多野在线播放| 久久精品国产亚洲blacked| 欧美日韩国产片| 国产黄色特级片| 韩国成人免费视频| 亚洲视频免费在线观看| 日韩精品久久久| 天堂中文字幕av| 国产一区二区三区香蕉| 国产精品视频免费在线| 中文字幕在线观看视频网站| 影音先锋国产精品| 欧美另类第一页| 亚洲一区电影在线观看| 第四色成人网| 亚洲天堂久久av| 中出视频在线观看| 国产福利资源一区| 日韩精品一区二区三区中文不卡 | 欧美少妇精品| 亚洲国产欧美在线人成| 色哟哟免费网站| 高清日韩av电影| 国产日韩欧美精品一区| 欧美日韩国产精品一区二区| 性xxxx视频| 9人人澡人人爽人人精品| 国产福利久久精品| 亚洲第一黄色片| 国产在线播放一区| 92国产精品久久久久首页 | 日韩欧美国产综合| 熟妇无码乱子成人精品| 欧美午夜在线播放| 日韩精品专区在线影院重磅| 亚洲av无一区二区三区久久| 亚洲一区电影| 亚洲国产精品成人精品| 变态另类丨国产精品| 日韩欧美四区| 亚洲欧美日韩网| 欧美另类z0zx974| 成人亚洲一区二区| 精品国产一区二区三区久久狼黑人| 91久久久久久久久久久久久久| 久久亚洲影视| 欧美久久久精品| 国产亚洲精品女人久久久久久| 影音先锋中文字幕一区二区| 51久久精品夜色国产麻豆| 黄色在线免费观看| 久久国产成人午夜av影院| 91在线视频导航| www.成人精品| av高清不卡在线| 欧美日韩国产综合在线| 日本中文字幕在线观看| 亚洲精品日韩综合观看成人91| 免费在线看黄色片| 台湾佬中文娱乐久久久| 欧美美女一区二区| 中文字幕在线观看91| 天天操综合520| 中文字幕一区日韩电影| 少妇影院在线观看| 男人的天堂成人在线| 国产精品人成电影在线观看| 99热这里只有精品66| 95精品视频在线| 亚洲欧洲日本国产| av资源网在线播放| 欧美日韩在线直播| 99精品一区二区三区无码吞精| 久久91成人| 色综合天天狠天天透天天伊人| 亚洲精品男人的天堂| 国产一区二区三区不卡在线观看| 精品乱码一区二区三区| 欧美成人性生活视频| 大伊人狠狠躁夜夜躁av一区| 加勒比av中文字幕| 亚洲警察之高压线| 欧美乱大交xxxxx另类电影| 狠狠人妻久久久久久| 国产精品一区二区果冻传媒| 欧美性xxxx69| 黄色大片在线| 91精品国产色综合久久| av网在线播放| 精品999成人| 国产在线999| 手机福利在线| 亚洲综合在线视频| 91看片破解版| 日韩一区自拍| 日本中文字幕成人| 狠狠躁夜夜躁av无码中文幕| 18欧美乱大交hd1984| 国产一区二区视频免费在线观看| y111111国产精品久久久| 精品国产一区二区三区在线观看 | 一本久道久久综合中文字幕| 高清中文字幕mv的电影| 一区二区三区在线电影| 国产精品日韩在线一区| 欧美777四色影视在线| 亚洲国产精品视频| 国产xxx在线观看| 久久久久亚洲| 国产欧美日韩高清| av在线播放av| 91国内精品野花午夜精品| 变态另类丨国产精品| 亚洲每日更新| 国产亚洲精品自在久久| 青草视频在线免费直播| 91精品国产乱码| 永久av免费网站| 理论电影国产精品| 一区二区免费在线观看| 成人精品一区二区三区电影| 这里只有精品久久| 一区二区自拍偷拍| 国产精品毛片无遮挡高清| 国产wwwxx| 色爱综合网欧美| 国产精品中文字幕久久久| 91女主播在线观看| 欧美日韩国产影片| 最新一区二区三区| 国产精品1区2区| 日本福利视频网站| 成人av动漫| 91高清视频在线免费观看| 婷婷五月综合激情| 色一区在线观看| 欧美成人国产精品一区二区| 美女尤物国产一区| 不卡中文字幕在线| 午夜免费欧美电影| 国产91av在线| 国产免费永久在线观看| 欧美日韩在线播放三区四区| 亚洲一级二级片| 国产91露脸合集magnet| 91九色在线观看视频| 欧美**vk| 国产日韩专区在线| 福利写真视频网站在线| 精品亚洲国产视频| 中文亚洲av片在线观看| 亚洲精品天堂网| 国产欧美日韩| 成人有码视频在线播放| 国产精品一区二区三区视频网站| 欧美成人一区二区三区片免费| 日韩欧美激情视频| 欧美国产日本韩| 精品久久久久久久无码 | 色8久久影院午夜场| 综合久久五月天| 99热这里只有精品5| 欧美日韩国产精品一区二区三区四区| 成人在线一级片| 国产麻豆午夜三级精品| 日韩精品―中文字幕| 久久国产影院| 国外成人免费视频| 九九热这里有精品| 97精品视频在线| 午夜不卡视频| 亚洲第五色综合网| 亚洲一区二区视频在线播放| 亚洲高清免费观看高清完整版在线观看 | 久久久久99精品成人片试看| 91日韩一区二区三区| 亚洲激情在线看| 亚洲一区网站| 欧美在线观看黄| 精品免费在线| 国内外成人免费视频| 成人51免费| 国产国语刺激对白av不卡| 成人超碰在线| 色妞欧美日韩在线| 亚洲aaaaaaa| 日韩欧美亚洲国产精品字幕久久久| 日本一区二区三区精品| 一区二区三区欧美久久| 亚洲AV无码成人精品区明星换面| 高清不卡一区二区在线| 午夜在线观看av| 国产精品久久久久9999高清| 色哟哟免费网站| 色琪琪久久se色| 欧美精品国产精品久久久 | 国产99视频精品免费视频36| 影音成人av| 2023亚洲男人天堂| 欧美日韩经典丝袜| 精品国产依人香蕉在线精品| 国产精品一区二区婷婷| 日韩av影片在线观看| 成人黄色在线观看视频| 欧美日韩精品免费观看视频 | 欧美三级日韩三级国产三级| 黄色一级片免费看| 亚洲综合色噜噜狠狠| 亚洲精品卡一卡二| 中文字幕一区二区三区乱码在线 | 久久蜜桃一区二区| 亚洲精品乱码久久| 成人一区二区视频| 国产又黄又嫩又滑又白| 国产一区二区在线影院| 天堂av在线8| 久久精品国产99国产| 深夜黄色小视频| 日本不卡一区二区| 在线观看高清免费视频| 日韩高清一区在线| 国产精品igao| 久久精品国产99国产| 五月婷婷丁香综合网| 免费的成人av| 日韩在线一区视频| 国产精品综合久久| 国产成人精品综合久久久久99 | 在线视频观看一区| 青青青视频在线播放| 日本一区二区免费在线观看视频| 真实乱视频国产免费观看| 国产性做久久久久久| 国产一区二区三区四区在线| 国产精品美女一区二区| 一区二区三区影视| 一区二区三区成人在线视频| 国产一级做a爱免费视频| 精品电影在线观看| 中文字幕在线播| 欧美日韩亚洲综合一区| 国产乱人乱偷精品视频| 日韩无一区二区| 天堂中文在线官网| 在线成人免费网站| 国产传媒在线播放| 久久久在线观看| 成人激情综合| 成人欧美一区二区三区在线湿哒哒| 精品视频在线观看免费观看| 国产精品xxxx| 欧美猛男男男激情videos| 亚洲一区二区三区涩| 欧美女激情福利| av免费观看网| 久久精品免费观看| xxxxwww一片| 久久久久久久综合日本| av黄色免费在线观看| 亚洲va中文字幕| 在线免费一级片| 精品国产乱码91久久久久久网站| 欧美成人综合在线| 九九久久久久久久久激情| 三级中文字幕在线观看| 成人av在线天堂| 日韩电影不卡一区| 妞干网这里只有精品| 国产亚洲毛片在线| www.污污视频| 91麻豆精品在线观看| 放荡的美妇在线播放| 色哟哟精品一区| 肥臀熟女一区二区三区| 永久免费毛片在线播放不卡 | 7777精品视频| 亚洲欧美久久精品| 精品国产乱码久久久久| 9999国产精品| 日韩avxxx| 国产精品一区二区在线播放| 法国空姐电影在线观看| 亚洲综合视频在线| 国产精品欧美激情在线| 亚洲香蕉成视频在线观看| av2020不卡| 69174成人网| 日韩毛片视频| 成年人黄色片视频| 成人av先锋影音| 黄色片在线观看网站| 欧美日韩三级在线| 飘雪影视在线观看免费观看 | 欧美激情论坛| 在线成人av| 免费高清视频在线观看| 日本一二三不卡| 二区视频在线观看| 亚洲电影免费观看高清| av网址在线免费观看| 国产精品欧美一区二区| 国产免费av一区二区三区| 日日摸日日碰夜夜爽av| 成人黄色在线视频| 久久免费黄色网址| 日韩一区二区在线观看视频 | 欧美成人精品在线播放| 久久久免费人体| 日韩视频在线播放| 丝袜国产日韩另类美女| 精品人妻一区二区三区日产乱码卜| 亚洲午夜久久久| 亚洲福利在线观看视频| 欧美裸体男粗大视频在线观看| 日日夜夜综合| 亚洲一区二区自拍偷拍| 另类综合日韩欧美亚洲| 亚洲天堂av中文字幕| 欧美日韩一区二区三区四区| av在线免费一区| 国产精品久久久久免费a∨大胸 | 久久久久久国产精品免费播放| 91精选在线观看| 成人在线播放| 亚洲a级在线观看| 欧美区一区二| 日韩精品国产一区| 精品成人在线视频| 黄色av网址在线免费观看| 国产精品福利久久久| 日韩国产一区| 精品国产鲁一鲁一区二区三区| 亚洲品质自拍视频网站| 亚洲va天堂va欧美ⅴa在线| 高清欧美一区二区三区| 欧美重口另类| 一级黄色香蕉视频| 中文字幕一区日韩精品欧美| 国产黄色av网站| 久久久久九九九九| 要久久爱电视剧全集完整观看| 玩弄japan白嫩少妇hd| 欧美国产精品一区二区| 国产精品女人久久久| 国内精品久久久久久中文字幕| 日本国产精品| 99视频在线免费| 最近中文字幕一区二区三区| 亚洲国产综合一区| 欧美在线影院在线视频| 成人影院天天5g天天爽无毒影院 | 91麻豆精品一二三区在线| 国产欧美123| 91原创在线视频| 一级黄色大片网站| 欧美另类极品videosbest最新版本| 另类尿喷潮videofree| 日本激情综合网| 亚洲国产精品久久久久秋霞影院| 黄色在线网站| 91精品综合久久久久久五月天| 亚洲二区免费| 长河落日免费高清观看| 亚洲精品一区二区三区精华液| 亚洲第一影院| 99久久免费观看| 国产三级精品三级在线专区| www.xxxx国产| 国产精品第一页在线| 好吊一区二区三区| 亚洲精品视频网址|