SpringBoot集成EasyExcel的使用

EasyExcel是阿里巴巴開源poi插件之一顿膨,主要解決了poi框架使用復雜,sax解析模式不容易操作牺弄,數(shù)據(jù)量大起來容易OOM富雅,解決了POI并發(fā)造成的報錯焕襟。主要解決方式:通過解壓文件的方式加載陨收,一行一行的加載饭豹,并且拋棄樣式字體等不重要的數(shù)據(jù)鸵赖,降低內(nèi)存的占用。

EasyExcel優(yōu)勢

  • 注解式自定義操作拄衰。
  • 輸入輸出簡單它褪,提供輸入輸出過程的接口
  • 支持一定程度的單元格合并等靈活化操作

二、常用注解

  • @ExcelProperty 指定當前字段對應(yīng)excel中的那一列翘悉∶4颍可以根據(jù)名字或者Index去匹配。當然也可以不寫妖混,默認第一個字段就是index=0老赤,以此類推。千萬注意制市,要么全部不寫抬旺,要么全部用index,要么全部用名字去匹配祥楣。千萬別三個混著用开财,除非你非常了解源代碼中三個混著用怎么去排序的汉柒。
  • @ExcelIgnore 默認所有字段都會和excel去匹配,加了這個注解會忽略該字段
  • @DateTimeFormat 日期轉(zhuǎn)換责鳍,用String去接收excel日期格式的數(shù)據(jù)會調(diào)用這個注解碾褂。里面的value參照java.text.SimpleDateFormat
  • @NumberFormat 數(shù)字轉(zhuǎn)換,用String去接收excel數(shù)字格式的數(shù)據(jù)會調(diào)用這個注解历葛。里面的value參照java.text.DecimalFormat
  • @ExcelIgnoreUnannotated默認不加ExcelProperty 的注解的都會參與讀寫,加了不會參與

三正塌、依賴


  <!-- easyexcel 主要依賴  這一個基本上就夠了-->
<dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>easyexcel</artifactId>
   <version>2.1.4</version>
</dependency>
    <!-- servlet-api -->
<dependency>
   <groupId>javax.servlet</groupId>
   <artifactId>javax.servlet-api</artifactId>
   <version>4.0.1</version>
   <scope>provided</scope>
</dependency>
<dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>fastjson</artifactId>
   <version>1.2.47</version>
</dependency>

四、監(jiān)聽


/**
 * EasyExcel 導入監(jiān)聽
 */
public class ExcelListener extends AnalysisEventListener {
    //可以通過實例獲取該值
    private List<Object> datas = new ArrayList<Object>();

    @Override
    public void invoke(Object o, AnalysisContext analysisContext) {
        datas.add(o);//數(shù)據(jù)存儲到list恤溶,供批量處理传货,或后續(xù)自己業(yè)務(wù)邏輯處理。
        doSomething(o);//根據(jù)自己業(yè)務(wù)做處理
    }

    private void doSomething(Object object) {
        //1宏娄、入庫調(diào)用接口
    }

    public List<Object> getDatas() {
        return datas;
    }

    public void setDatas(List<Object> datas) {
        this.datas = datas;
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        // datas.clear();//解析結(jié)束銷毀不用的資源
    }
}

五问裕、接口導入Excel

try {
            //獲取文件名
            String filename = file.getOriginalFilename();
            //獲取文件流
            InputStream inputStream = file.getInputStream();
            //實例化實現(xiàn)了AnalysisEventListener接口的類
            ExcelListener listener = new ExcelListener();
            //傳入?yún)?shù)
            ExcelReader excelReader = new ExcelReader(inputStream, ExcelTypeEnum.XLS, null, listener);
            //讀取信息
            excelReader.read(new Sheet(1, 0, Test.class));
            //獲取數(shù)據(jù)
            List<Object> list = listener.getDatas();
            if (list.size() > 1) {
                for (int i = 0; i < list.size(); i++) {
                    Testobj = (Test) list.get(i);
                    JSONObject jo = new JSONObject();
                }
            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }

六、接口導出Excel (HttpServletResponse response, HttpServletRequest request)


try {
    String filenames = "111111";
    String userAgent = request.getHeader("User-Agent");
    if (userAgent.contains("MSIE") || userAgent.contains("Trident")) {
        filenames = URLEncoder.encode(filenames, "UTF-8");
    } else {
        filenames = new String(filenames.getBytes("UTF-8"), "ISO-8859-1");
    }
    response.setContentType("application/vnd.ms-exce");
    response.setCharacterEncoding("utf-8");
    response.addHeader("Content-Disposition", "filename=" + filenames + ".xlsx");
    EasyExcel.write(response.getOutputStream(), Test.class).sheet("sheet").doWrite(testList);
} catch (Exception e) {
}

七孵坚、本地導入粮宛、本地導出

List<Test> testList = new ArrayList<>();
try {
    String strUrl = "C:\\Users\\Administrator\\Desktop\\json.xlsx";
    File multipartFile = new File(strUrl);
    InputStream inputStream = new FileInputStream(multipartFile);
    //實例化實現(xiàn)了AnalysisEventListener接口的類
    ExcelListener listener = new ExcelListener();
    //傳入?yún)?shù)
    ExcelReader excelReader = new ExcelReader(inputStream, ExcelTypeEnum.XLS, null, listener);
    //讀取信息
    excelReader.read(new Sheet(1, 0, Test.class));
    //獲取數(shù)據(jù)
    List<Object> list = listener.getDatas();
    if (list.size() > 1) {
        for (int i = 0; i < list.size(); i++) {
            Testobj = (Test) list.get(i);
        }
    }
} catch (Exception e) {
    System.out.println(e.getMessage());
}
try {
    String strUrl = "C:\\Users\\Administrator\\Desktop\\json"+System.currentTimeMillis()+".xlsx";
    EasyExcel.write(strUrl,Test.class).sheet("sheet").doWrite(testList);
} catch (Exception e) {
}

以上就是EasyExcel的基礎(chǔ)使用過程,歡迎點贊關(guān)注交流卖宠。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末巍杈,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子扛伍,更是在濱河造成了極大的恐慌筷畦,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刺洒,死亡現(xiàn)場離奇詭異鳖宾,居然都是意外死亡,警方通過查閱死者的電腦和手機逆航,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門鼎文,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人因俐,你說我怎么就攤上這事拇惋。” “怎么了抹剩?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵撑帖,是天一觀的道長。 經(jīng)常有香客問我澳眷,道長胡嘿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任境蔼,我火速辦了婚禮灶平,結(jié)果婚禮上伺通,老公的妹妹穿的比我還像新娘。我一直安慰自己逢享,他們只是感情好罐监,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著瞒爬,像睡著了一般弓柱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上侧但,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天矢空,我揣著相機與錄音,去河邊找鬼禀横。 笑死屁药,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的柏锄。 我是一名探鬼主播酿箭,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼趾娃!你這毒婦竟也來了缭嫡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤抬闷,失蹤者是張志新(化名)和其女友劉穎妇蛀,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體笤成,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡评架,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了疹启。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片古程。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡蔼卡,死狀恐怖喊崖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情雇逞,我是刑警寧澤荤懂,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站塘砸,受9級特大地震影響节仿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜掉蔬,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一廊宪、第九天 我趴在偏房一處隱蔽的房頂上張望矾瘾。 院中可真熱鬧,春花似錦箭启、人聲如沸壕翩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽放妈。三九已至,卻和暖如春荐操,著一層夾襖步出監(jiān)牢的瞬間芜抒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工托启, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留宅倒,地道東北人。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓屯耸,卻偏偏與公主長得像唉堪,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子肩民,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容