Java 領域解析、生成 Excel 比較有名的架構有 Apache poi、jxl 等。但他們都存在一個嚴重的問題就是非常的耗記憶體。如果你的系統并發量不大的話可能還行,但是一旦并發上來後一定會 OOM 或者 JVM 頻繁的 FULL GC。
EasyExcel 是阿裡巴巴開源的一個 excel 處理架構,以使用簡單、節省記憶體著稱。 EasyExcel 能大大減少占用記憶體的主要原因是在解析 Excel 時沒有将檔案資料一次性全部加載到記憶體中,而是從磁盤上一行行讀取資料,逐個解析。
EasyExcel 采用一行一行的解析模式,并将一行的解析結果以觀察者的模式通知處理(AnalysisEventListener)。
簡單地了解:可以友善、快速的讀取、寫入 execl 内容。
【官方文檔位址:】 https://alibaba-easyexcel.github.io/index.html https://www.yuque.com/easyexcel
資料導入:減輕錄入工作量
資料導出:統計資訊歸檔
資料傳輸:異構系統之間資料傳輸
EasyExcel優勢:
注解式自定義操作。 輸入輸出簡單,提供輸入輸出過程的接口 支援一定程度的單元格合并等靈活化操作
@ExcelProperty:指定目前字段對應 excel 中的那一列。可以根據名字或者Index去比對。當然也可以不寫,預設第一個字段就是index=0,以此類推。千萬注意,要麼全部不寫,要麼全部用index,要麼全部用名字去比對。千萬别三個混着用,除非你非常了解源代碼中三個混着用怎麼去排序的。
@ExcelIgnore:預設所有字段都會和excel去比對,加了這個注解會忽略該字段
@DateTimeFormat:日期轉換,用 String 去接收 excel 日期格式的資料會調用這個注解。裡面的 value 參照 java.text.SimpleDateFormat
@NumberFormat:數字轉換,用 String 去接收 excel 數字格式的資料會調用這個注解。裡面的 value 參照 java.text.DecimalFormat
@ExcelIgnoreUnannotated:預設不加 ExcelProperty 的注解的都會參與讀寫,加了不會參與
@ExcelProperty注解也可以用index進行索引設定表頭順序
建立Controller,通路接口下載下傳導出Excel
導出結果
