+EasyExcel學習

一、引入
       在一個項目系統中,只要運行了,就會產生很多數據,一般會採用分頁顯示,但是爲了方便瀏覽數據,一般都會做一個功能,導出成excel,而爲了添加數據,也會做一個導入excel功能,進行批量導入。而現在在市場有很多這方面的技術,如Apache poi、jxl。但是這兩種技術都存在一個問題,就是非常的耗內存,雖然poi有一套SAX模式的API可以一定程度的解決一些內存溢出的問題,但poi還是有一些缺陷,比如07版Excel解壓縮以及解壓後存儲都是在內存中完成的,內存消耗依然很大。
       而基於這一點,阿里巴巴開發出了EasyExcel,那麼什麼是EasyExcel?
二、EasyExcel簡介
       EasyExcel的是由阿里巴巴團隊開發的快速、簡單避免OOM的java處理Excel工具。easyexcel重寫了poi對07版Excel的解析,能夠原本一個3M的excel用POI sax依然需要100M左右內存降低到幾M,並且再大的excel不會出現內存溢出,03版依賴POI的sax模式。在上層做了模型轉換的封裝,讓使用者更加簡單方便。github地址:https://github.com/alibaba/easyexcel,文檔地址:https://alibaba-easyexcel.github.io/index.html 。
三、EasyExcel之導入,導出
創建一個maven工程,導入依賴:

[XML] 純文本查看 複製代碼
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>1.1.2-beat1</version>
        </dependency>
        <!--非必要包,可以簡略掉get,set方法-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.2</version>
        </dependency>
        <!--測試-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>


讀取的文件如下:

1.讀取指定文件
  

[Java] 純文本查看 複製代碼
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
/**
     *讀取指定文件
     */
    @Test
    public void read(){
        /*文件路徑*/
        String filePath = "D:\\user.xlsx";
        try(InputStream fileStream=new FileInputStream(filePath) ) {
            /*Sheet:表格對象,第一個參數代表表格的索引,即第幾個表格,第二個參數是從第幾行開始,默認第一行是0*/
            Sheet sheet=new Sheet(1,0);
            List<Object> read = EasyExcelFactory.read(fileStream, sheet);
            for (Object object :
                    read) {
                System.out.println(object);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

輸出如下:

2.生成excel

[Java] 純文本查看 複製代碼
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
@Test
   public void write() throws FileNotFoundException {
       // 生成EXCEL並指定輸出路徑
       OutputStream out = new FileOutputStream("D:\\out.xlsx");
       ExcelWriter writer = new ExcelWriter(out, ExcelTypeEnum.XLSX);
       // 設置,第一個參數是第幾個表格,第二個參數是從第幾行開始
       Sheet sheet = new Sheet(1, 0);
       //設置表格名
       sheet.setSheetName("sheet1");
       // 設置標題
       Table table = new Table(1);
       List<List<String>> titles = new ArrayList<List<String>>();
       titles.add(Arrays.asList("用戶名"));
       titles.add(Arrays.asList("年齡"));
       titles.add(Arrays.asList("生日"));
       titles.add(Arrays.asList("地址"));
       table.setHead(titles);
       // 查詢數據導出即可 比如說一次性總共查詢出100條數據
       List<List<String>> userList = new ArrayList<>();
       for (int i = 0; i < 100; i++) {
           userList.add(Arrays.asList( "小明" + i, String.valueOf(i), new Date().toString(),"幸福路"+i+"號"));
       }
       writer.write0(userList, sheet, table);
       writer.finish();
 
 
   }


生成的表格:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章