<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Spring Boot + EasyExcel 導(dǎo)入導(dǎo)出,好用到爆,可以扔掉 POI 了!

          共 8202字,需瀏覽 17分鐘

           ·

          2021-11-26 21:40


          作者 | 程序員阿浪

          來源 | https://www.jianshu.com/p/4e6aa6342b33

          一、EasyExcel

          EasyExcel是阿里巴巴開源poi插件之一,主要解決了poi框架使用復(fù)雜,sax解析模式不容易操作,數(shù)據(jù)量大起來容易OOM,解決了POI并發(fā)造成的報錯。

          主要解決方式:通過解壓文件的方式加載,一行一行的加載,并且拋棄樣式字體等不重要的數(shù)據(jù),降低內(nèi)存的占用。

          EasyExcel優(yōu)勢

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

          二、常用注解

          @ExcelProperty

          指定當(dāng)前字段對應(yīng)excel中的那一列。可以根據(jù)名字或者Index去匹配。當(dāng)然也可以不寫,默認(rèn)第一個字段就是index=0,以此類推。千萬注意,要么全部不寫,要么全部用index,要么全部用名字去匹配。千萬別三個混著用,除非你非常了解源代碼中三個混著用怎么去排序的。如果您正在學(xué)習(xí)Spring Boot,推薦一個連載多年還在繼續(xù)更新的免費教程:http://blog.didispace.com/spring-boot-learning-2x/

          @ExcelIgnore

          默認(rèn)所有字段都會和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

          默認(rèn)不加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 導(dǎo)入監(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é)束銷毀不用的資源
              }
          }

          五、接口導(dǎo)入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(10, 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());
              }

          六、接口導(dǎo)出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) {
          }

          另外,如果您正在學(xué)習(xí)Spring Cloud,推薦一個連載多年還在繼續(xù)更新的免費教程:https://blog.didispace.com/spring-cloud-learning/

          七、本地導(dǎo)入、本地導(dǎo)出

          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(10, 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)注交流。

          往期推薦

          浪潮編了個“謊言”舉報我們...

          Spring Boot 2.6 正式發(fā)布:循環(huán)依賴默認(rèn)禁止、增加SameSite屬性...

          一文教你如何高效使用 IDEA !

          周杰倫新動作的老朋友是誰?程序員:送分題!

          把iPhone充電口改成Type-C,賣了56萬!



          技術(shù)交流群

          最近有很多人問,有沒有讀者交流群,想知道怎么加入。加入方式很簡單,有興趣的同學(xué),只需要點擊下方卡片,回復(fù)“加群,即可免費加入我們的高質(zhì)量技術(shù)交流群!

          點擊閱讀原文,送你免費Spring Boot教程!

          瀏覽 56
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  精品国产午夜福利 | 黄色无码影视 | 免费高清无码在线观看 | 欧美精品三级视频在线看 | 国产极品se婷婷 |