一、EasyExcel簡介
EasyExcel是一個基於Java的開源工具,幾乎不需要學習就可以編寫Excel,生成Excel文件並讀取Excel文件。該工具可以幫助用戶輕鬆處理Excel文件,是Apache POI 項目的增強版。
該工具旨在讓在Java EE和Spring應用程序中處理Excel表格變得簡單。
以下是EasyExcel的一些核心特性:
- 支持GoogleProtobuf和java的多種標準內容(包括Java8)的轉換。
- 幾乎支持所有的Excel常規操作,包括單元格寬度、類型轉換、數據格式和多種風格等。
- 低內存佔用。
- 支持將Excel導出為多種格式,如CSV、HTML、JSON和TSV。
二、EasyExcel的安裝及使用方法
使用EasyExcel之前,需要先引入相關的依賴包。可以在pom.xml文件中加入以下代碼塊即可:
<dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.11</version> </dependency>
EasyExcel提供了豐富的API,可以清楚地表達你想做什麼。以下是一個簡單的例子:
/** * 導出 Excel 例子 **/ public void exportExcel() throws IOException { ServletOutputStream out = response.getOutputStream(); try { response.reset(); response.setContentType("application/octet-stream;charset=utf-8"); response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")); // 獲取需要導出的數據 List<DemoData> list = getData(); EasyExcel.write(out, DemoData.class).sheet("模板").doWrite(list); } catch (Exception e) { LOGGER.error("導出失敗", e); } finally { out.close(); } }
三、EasyExcel的常見用法
1、簡單數據導出
EasyExcel提供了一種簡單的方法來將集合的數據導出到Excel文檔中。以下是一個簡單的代碼示例:
/** * 最簡單的導出 Excel 的例子 **/ @Test public void simplestWrite() throws IOException { String filename = "/Users/alibaba/IdeaProjects/easyexcel/src/test/java/com/alibaba/easyexcel/test/demo/write/simple.xls"; // 這裡需要指定寫用哪個 class 去寫 EasyExcel.write(filename, DemoData.class).sheet("模板").doWrite(data()); }
2、複雜報表導出
EasyExcel支持複雜的表格布局和實現自定義樣式。以下代碼展示了如何使用EasyExcel在單個Excel文檔中插入多個Sheet的代碼:
/** * 複雜報表示例 **/ public void complexWrite() throws IOException { String filename = "/Users/alibaba/IdeaProjects/easyexcel/src/test/java/com/alibaba/easyexcel/test/demo/write/complex.xls"; OutputStream out = new FileOutputStream(filename); try { // 這裡 需要指定寫用哪個 class 去寫 // 如果這裡設為null,則代表這個 sheet 只有表頭,還沒有內容,這提供了一種動態生成 Sheet 的方式 Sheet sheet1 = new Sheet(1, 0, WriteModel.class, "Sheet1", null); sheet1.setTableStyle(createTableStyle()); // 註冊自定義監聽器 this.registerCustomListeners(); EasyExcel.write(out, WriteModel.class).registerWriteHandler(this.customSheetWriteHandler) .registerWriteHandler(this.customSheetWriteHandler2).registerWriteHandler(this.customSheetWriteHandler3) .head(createTestListStringHead()).sheet("模板").doWrite(data()); out.flush(); } finally { // 千萬別忘記關閉流 out.close(); } }
3、大量數據導出
隨著Excel文件中的數據量的增長,內存的佔用量會急劇上升。EasyExcel提供了一種專門優化內存的高效方法,通過將列表分批寫入到文檔中,以節省大量內存。
/** * 大量數據導出(分批次導出) **/ public void repeatedWrite() throws IOException { String fileName = "/Users/alibaba/IdeaProjects/easyexcel/src/test/java/com/alibaba/easyexcel/test/demo/write/repeatedWrite.xlsx"; try (OutputStream out = new FileOutputStream(fileName)) { ExcelWriter excelWriter = EasyExcel.write(out).head(head()).build(); WriteSheet writeSheet = EasyExcel.writerSheet("模板").build(); int total = getData().size(); int count = 100000; int round = total % count == 0 ? total / count : total / count + 1; for (int i = 0; i < round; i++) { List<DemoData> list = getData().stream().skip(i * count).limit(count).collect(Collectors.toList()); excelWriter.write(list, writeSheet); excelWriter.finish(); } } catch (IOException ex1) { ex1.printStackTrace(); } }
4、Excel數據讀取
EasyExcel支持用戶將Excel文件反序列化為Java對象,從而可以極大地加速數據處理。EasyExcel自帶Map和List讀取樣式和豐富的數據讀取方式。以下代碼演示了如何使用EasyExcel對Excel進行讀取:
/** * 讀取Excel示例 **/ public void readExcel() { String filename = "classpath:simple.xlsx"; // 這裡 只要,然後讀取第一個sheet 同步返回數據流,需要自己關閉流 try (InputStream inputStream = FileUtil.getInputStream(filename)) { EasyExcel.read(inputStream, DemoData.class, new DemoDataListener()).sheet().doRead(); } catch (IOException ex1) { ex1.printStackTrace(); } }
四、小結
EasyExcel是一個十分實用的Java Excel操作工具。它提供了API,能夠快速自定義表格樣式,用於Java EE和Spring應用程序中處理Excel表格變得簡單。在實際應用中,我們可以根據實際需要選擇EasyExcel工具對表格進行操作,為數據處理提供極大的方便。
原創文章,作者:HINLJ,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/332700.html