springboot整合easyexcel實現(xiàn)Excel導(dǎo)入導(dǎo)出

easyexcel:快速、簡單避免OOM的java處理Excel工具

Java解析碰声、生成Excel比較有名的框架有Apache poi跟啤、jxl。但他們都存在一個嚴重的問題就是非常的耗內(nèi)存起趾,poi有一套SAX模式的API可以一定程度的解決一些內(nèi)存溢出的問題诗舰,但POI還是有一些缺陷,比如07版Excel解壓縮以及解壓后存儲都是在內(nèi)存中完成的训裆,內(nèi)存消耗依然很大眶根。

easyexcel重寫了poi對07版Excel的解析蜀铲,能夠原本一個3M的excel用POI sax依然需要100M左右內(nèi)存降低到KB級別,并且再大的excel不會出現(xiàn)內(nèi)存溢出属百,03版依賴POI的sax模式记劝。在上層做了模型轉(zhuǎn)換的封裝,讓使用者更加簡單方便
詳細使用及介紹請參考官網(wǎng)

快速使用

創(chuàng)建springboot工程族扰,然后引入相關(guān)依賴包如下:

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

工程結(jié)構(gòu)如下圖:


springboot工程

springboot工程創(chuàng)建好之后厌丑,引入easyExcel依賴包即可,使用前最好咨詢下最新版渔呵,或者到mvn倉庫搜索先easyexcel的最新版怒竿,本文使用的是如下版本

<dependency>
       <groupId>com.alibaba</groupId>
       <artifactId>easyexcel</artifactId>
       <version>1.1.2-beta5</version>
</dependency>

然后創(chuàng)建User實體類并繼承BaseRowModel ,然后在對應(yīng)字段上添加注解

@Data
@Builder
public class User extends BaseRowModel {

    @ExcelProperty(value = "姓名",index = 0)
    private String name;

    @ExcelProperty(value = "密碼",index = 1)
    private String password;

    @ExcelProperty(value = "年齡",index = 2)
    private Integer age;
}

注:@Data,@Builder注解是引入的lombok的注解扩氢,省略了get/set方法耕驰。@Builder是后邊方便批量創(chuàng)建實體類所用的。
@ExcelProperty注解是引入的easyExcel依賴包中的录豺,上面字段注解的意思value是表頭名稱朦肘,index是第幾列,可以參考如下圖:


image.png

之后創(chuàng)建UserController類并創(chuàng)建返回list集合的方法双饥,用于測試輸出Excel表中

 public List<User> getAllUser(){
        List<User> userList = new ArrayList<>();
       for (int i=0;i<100;i++){
           User user = User.builder().name("張三"+ i).password("1234").age(i).build();
           userList.add(user);
       }
        return userList;
    }

上面for循環(huán)目的是用了批量創(chuàng)建list集合媒抠,你可以自己一個個的創(chuàng)建

下面進行測試,

public class EasyexceldemoApplicationTests {
    //注入controller類用來調(diào)用返回list集合的方法
    @Autowired
    private UserController userController;


    @Test
    public void contextLoads(){
        // 文件輸出位置
        OutputStream out = null;
        try {
            out = new FileOutputStream("C:\\Users\\smfx1314\\Desktop\\bbb\\test.xlsx");
            ExcelWriter writer = EasyExcelFactory.getWriter(out);

            // 寫僅有一個 Sheet 的 Excel 文件, 此場景較為通用
            Sheet sheet1 = new Sheet(1, 0, User.class);

            // 第一個 sheet 名稱
            sheet1.setSheetName("第一個sheet");

            // 寫數(shù)據(jù)到 Writer 上下文中
            // 入?yún)?: 數(shù)據(jù)庫查詢的數(shù)據(jù)list集合
            // 入?yún)?: 要寫入的目標(biāo) sheet
            writer.write(userController.getAllUser(), sheet1);

            // 將上下文中的最終 outputStream 寫入到指定文件中
            writer.finish();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }finally {
            try {
                // 關(guān)閉流
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }

}

注:文件輸出位置要自定義好咏花,包括xxx.xlsx文檔名稱领舰,意思數(shù)據(jù)輸出就在這個文檔了。
sheet1.setSheetName("第一個sheet")用了設(shè)置文檔名稱迟螺,看下圖:

image.png

測試成功冲秽,然后看看你的xxx.xlsx文檔里面是否有內(nèi)容輸出
源碼參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市矩父,隨后出現(xiàn)的幾起案子锉桑,更是在濱河造成了極大的恐慌,老刑警劉巖窍株,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件民轴,死亡現(xiàn)場離奇詭異,居然都是意外死亡球订,警方通過查閱死者的電腦和手機后裸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來冒滩,“玉大人微驶,你說我怎么就攤上這事。” “怎么了因苹?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵苟耻,是天一觀的道長。 經(jīng)常有香客問我扶檐,道長凶杖,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任款筑,我火速辦了婚禮智蝠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘奈梳。我一直安慰自己杈湾,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布颈嚼。 她就那樣靜靜地躺著毛秘,像睡著了一般饭寺。 火紅的嫁衣襯著肌膚如雪阻课。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天艰匙,我揣著相機與錄音限煞,去河邊找鬼。 笑死员凝,一個胖子當(dāng)著我的面吹牛署驻,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播健霹,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼旺上,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了糖埋?” 一聲冷哼從身側(cè)響起宣吱,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎瞳别,沒想到半個月后征候,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡祟敛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年疤坝,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片馆铁。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡跑揉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出埠巨,到底是詐尸還是另有隱情畔裕,我是刑警寧澤衣撬,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站扮饶,受9級特大地震影響具练,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜甜无,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一扛点、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧岂丘,春花似錦陵究、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至寨蹋,卻和暖如春松蒜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背已旧。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工秸苗, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人运褪。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓惊楼,卻偏偏與公主長得像,于是被迫代替她去往敵國和親秸讹。 傳聞我的和親對象是個殘疾皇子檀咙,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,055評論 2 355