最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot整合EasyExcel進(jìn)行大數(shù)據(jù)處理的方法詳解

 更新時(shí)間:2022年05月24日 08:38:19   作者:胡安民  
EasyExcel是一個(gè)基于Java的簡(jiǎn)單、省內(nèi)存的讀寫(xiě)Excel的開(kāi)源項(xiàng)目。在盡可能節(jié)約內(nèi)存的情況下支持讀寫(xiě)百M(fèi)的Excel。本文將在SpringBoot中整合EasyExcel進(jìn)行大數(shù)據(jù)處理,感興趣的可以了解一下

EasyExcel

EasyExcel文檔

我用過(guò)Poi和EasyPoi這些工具總體來(lái)說(shuō):

  • POI 優(yōu)點(diǎn)我覺(jué)得自由,但是迎來(lái)的就是復(fù)雜度,和大數(shù)據(jù)量時(shí)候性能的缺點(diǎn)
  • EasyPoi基于POI 的二次封裝,解決了大部分的常用場(chǎng)景,簡(jiǎn)化了代碼,但是特別復(fù)雜表格處理還是不行,而且性能的話和poi差不多,簡(jiǎn)單來(lái)說(shuō)就是簡(jiǎn)化了Poi的操作,少些點(diǎn)代碼

下面來(lái)說(shuō)說(shuō)今天的主角EasyExcel,這個(gè)項(xiàng)目是阿里巴巴開(kāi)發(fā)的開(kāi)源的,專門(mén)針對(duì)大數(shù)據(jù)批量處理,比如100萬(wàn)+的Excel數(shù)據(jù)這種,會(huì)比以上幾款要快很多并且性能上也不會(huì)太占用系統(tǒng)的資源,但是不好的地方就是,處理不了復(fù)雜的表單 ,不能像poi那么自由,所以有得有失,基本日常所需都能辦到,特殊場(chǎng)景在可以使用模板的方式,或者使用poi也行

主流操作的excel格式

下面這種分組的也能讀取,但是需要跳過(guò)前兩行的標(biāo)題

下面演示,基礎(chǔ)的入門(mén)讀和寫(xiě)案例, 需要對(duì)數(shù)據(jù)進(jìn)行特殊處理,多Sheet,或者同步等需要參考文檔,基礎(chǔ)會(huì)了看文檔就簡(jiǎn)單了

需要的Maven

    <dependencies>
        <!--        開(kāi)發(fā)web 項(xiàng)目和啟動(dòng)Springboot必須添加的-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.4.1</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>3.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>2.0.3.graal</version>
            <scope>compile</scope>
        </dependency>

    </dependencies>

基礎(chǔ)讀案例

操作的excel

實(shí)體類

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class EmployeesEntity {
    @ExcelProperty(index = 0)
    private Integer no;  //工號(hào)
    @ExcelProperty(index = 1)
    private String name;
    @ExcelProperty(index = 2)
    private Double fund;
    @ExcelProperty(index = 3)
    private Double postSalary;
    @ExcelProperty(index = 4)
    private Double performanceOf;
    @ExcelProperty(index = 5)
    private Double allWork;
    @ExcelProperty(index = 6)
    private Double violations;
    @ExcelProperty(index = 7)
    private Double traffic;
    @ExcelProperty(index = 8)
    private Double communication;
}

讀取監(jiān)聽(tīng)器

一般是異步讀取,可以指定同步讀取數(shù)據(jù)(看文檔)

public class EmployeesListener extends AnalysisEventListener<EmployeesEntity> {


    /**
     * 這個(gè)每一條數(shù)據(jù)解析都會(huì)來(lái)調(diào)用
     *
     * @param data
     *            one row value. Is is same as {@link AnalysisContext#readRowHolder()}
     * @param context
     */
    @Override
    public void invoke(EmployeesEntity data, AnalysisContext context) {
        System.out.println("解析到一條數(shù)據(jù):"+JSON.toJSONString(data));
    }

    /**
     * 所有數(shù)據(jù)解析完成了 都會(huì)來(lái)調(diào)用
     *
     * @param context
     */
    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {

    }


}

測(cè)試

    @Test
    public void get(){
        File file = new File("./src/main/resources/大客戶部-薪酬表.xlsx");
        String absolutePath = file.getAbsolutePath();
//        // 這里 需要指定讀用哪個(gè)class去讀,然后讀取第一個(gè)sheet 文件流會(huì)自動(dòng)關(guān)閉
        EasyExcel.read(absolutePath, EmployeesEntity.class, new EmployeesListener()).sheet().doRead();

    }

基礎(chǔ)寫(xiě)案例

寫(xiě)可以指定Sheet進(jìn)行寫(xiě),還可以指定列進(jìn)行寫(xiě),還可以寫(xiě)入圖片,簡(jiǎn)單的合并單元格…下面教程默認(rèn)寫(xiě)入第一個(gè)Sheet中

實(shí)體類

@ExcelProperty("字符串標(biāo)題") 列的標(biāo)題

@Data
public class DemoData {
    @ExcelProperty("字符串標(biāo)題")
    private String string;
    @ExcelProperty("日期標(biāo)題")
    private Date date;
    @ExcelProperty("數(shù)字標(biāo)題")
    private Double doubleData;
    /**
     * 忽略這個(gè)字段
     */
    @ExcelIgnore
    private String ignore;
}

測(cè)試

//生成模擬數(shù)據(jù)
    private List<DemoData> data() {
        List<DemoData> list = new ArrayList<DemoData>();
        for (int i = 0; i < 10; i++) {
            DemoData data = new DemoData();
            data.setString("字符串" + i);
            data.setDate(new Date());
            data.setDoubleData(0.56);
            list.add(data);
        }
        return list;
    }

    /**
     * 最簡(jiǎn)單的寫(xiě)
     * <p>1. 創(chuàng)建excel對(duì)應(yīng)的實(shí)體對(duì)象 參照{(diào)@link DemoData}
     * <p>2. 直接寫(xiě)即可
     */
    @Test
    public void simpleWrite() {
        // 寫(xiě)
        File file = new File("./src/main/resources/DemoData.xlsx");
        // 這里 需要指定寫(xiě)用哪個(gè)class去寫(xiě),然后寫(xiě)到第一個(gè)sheet,名字為模板 然后文件流會(huì)自動(dòng)關(guān)閉
        // 如果這里想使用03 則 傳入excelType參數(shù)即可
        EasyExcel.write(file.getAbsolutePath(), DemoData.class).sheet("DemoData").doWrite(data());

    }

Excel模板方式

一般特別復(fù)雜的excel,比如發(fā)票,等, 一般就需要使用模板的方式,如果使用代碼的話太復(fù)雜了

準(zhǔn)備模塊

實(shí)體類

@Data
public class FillData {
    private String name;
    private double number;
}

測(cè)試

    @Test
    public void simpleFill() {
        // 模板注意 用{} 來(lái)表示你要用的變量 如果本來(lái)就有"{","}" 特殊字符 用"\{","\}"代替
        File templateFileName  = new File("./src/main/resources/模板.xlsx");

        File fill  = new File("./src/main/resources/fillData.xlsx");
        // 這里 會(huì)填充到第一個(gè)sheet, 然后文件流會(huì)自動(dòng)關(guān)閉
        FillData fillData = new FillData();
        fillData.setName("張三");
        fillData.setNumber(5.2);
        EasyExcel.write(fill.getAbsolutePath()).withTemplate(templateFileName.getAbsolutePath()).sheet().doFill(fillData);

    }

如果是統(tǒng)計(jì)表,而且標(biāo)題是非常復(fù)雜的情況下,那么我們使用列表填充會(huì)很容易解決(自行看文檔)

到此這篇關(guān)于SpringBoot整合EasyExcel進(jìn)行大數(shù)據(jù)處理的方法詳解的文章就介紹到這了,更多相關(guān)SpringBoot EasyExcel大數(shù)據(jù)處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring Boot + Vue 基于 RSA 的用戶身份認(rèn)證加密機(jī)制實(shí)現(xiàn)過(guò)程

    Spring Boot + Vue 基于 RSA 的用戶身份

    RSA是一種非對(duì)稱加密算法,適用于用戶身份認(rèn)證加密,本文介紹了基于RSA的用戶身份認(rèn)證加密機(jī)制的實(shí)現(xiàn),包括前端Vue.js使用jsencrypt庫(kù)對(duì)用戶名密碼進(jìn)行加密,后端使用RSA私鑰解密驗(yàn)證用戶憑據(jù),感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • 分析Java中的類加載問(wèn)題

    分析Java中的類加載問(wèn)題

    很多時(shí)候提到類加載,大家總是沒(méi)法馬上回憶起順序,這篇文章會(huì)用一個(gè)例子為你把類加載的諸多問(wèn)題一次性澄清
    2021-06-06
  • Java中EnumSet代替位域代碼詳解

    Java中EnumSet代替位域代碼詳解

    這篇文章主要介紹了Java中EnumSet代替位域代碼詳解,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • Java去除字符串空格的幾種方法簡(jiǎn)單舉例

    Java去除字符串空格的幾種方法簡(jiǎn)單舉例

    在Java中要去掉字符串中的空格,可以使用多種方法,這篇文章主要給大家介紹了關(guān)于Java去除字符串空格的幾種方法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • Java使用Ajax實(shí)現(xiàn)跨域上傳圖片功能

    Java使用Ajax實(shí)現(xiàn)跨域上傳圖片功能

    這篇文章主要介紹了Java使用Ajax實(shí)現(xiàn)跨域上傳圖片功能,需要的朋友可以參考下
    2017-09-09
  • Java實(shí)現(xiàn)復(fù)制文件并命名的超簡(jiǎn)潔寫(xiě)法

    Java實(shí)現(xiàn)復(fù)制文件并命名的超簡(jiǎn)潔寫(xiě)法

    這篇文章主要介紹了Java實(shí)現(xiàn)復(fù)制文件并命名的超簡(jiǎn)潔寫(xiě)法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • SpringBoot整合HTTPS的項(xiàng)目實(shí)踐

    SpringBoot整合HTTPS的項(xiàng)目實(shí)踐

    HTTPS的主要作用是通過(guò)SSL證書(shū)保護(hù)用戶數(shù)據(jù)的安全與隱私,增加網(wǎng)站信任度,防止數(shù)據(jù)被竊取和篡改,保護(hù)網(wǎng)站免受釣魚(yú)攻擊,本文就來(lái)介紹一下,感興趣的可以了解一下
    2024-10-10
  • Spring中的PathVariable注釋解析

    Spring中的PathVariable注釋解析

    這篇文章主要介紹了Spring中的PathVariable注釋用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • JDK8配置環(huán)境變量的bat文件的詳細(xì)教程

    JDK8配置環(huán)境變量的bat文件的詳細(xì)教程

    這篇文章主要介紹了JDK8配置環(huán)境變量的bat文件,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • SpringBoot基于Mybatis-Plus自動(dòng)代碼生成

    SpringBoot基于Mybatis-Plus自動(dòng)代碼生成

    這篇文章主要介紹了SpringBoot基于Mybatis-Plus自動(dòng)代碼生成,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04

最新評(píng)論

吉木乃县| 错那县| 保定市| 鹤庆县| 平顺县| 通道| 新密市| 龙里县| 滕州市| 宁德市| 鲁甸县| 刚察县| 金平| 咸阳市| 上饶市| 伊春市| 哈尔滨市| 黔西县| 鄂尔多斯市| 南通市| 石河子市| 凉山| 长葛市| 扶沟县| 高密市| 桑植县| 岳普湖县| 桐梓县| 三亚市| 邢台市| 大厂| 安仁县| 周宁县| 依安县| 霍山县| 清水河县| 太康县| 容城县| 勐海县| 长葛市| 长白|