一、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
微信掃一掃
支付寶掃一掃