一、EasyExcel 簡介
EasyExcel 是一個開源的跨平台 Java 處理 Excel 的第三方庫,它採用了註解方式設置 Excel 表格的屬性,可以輕鬆實現 Excel 的讀寫、導入導出等操作。EasyExcel 支持 XLS 和 XLSX 兩種 Excel 格式,並且使用效率高、易於使用、具有完善的文檔和示例支持。
二、EasyExcel 導出的優點
相比於 POI,EasyExcel 導出的優點在於如下幾點:
- 採用註解方式設置 Excel 表格的屬性,實現代碼的可讀性和可維護性;
- 採用流式寫入方式,大幅度減少內存佔用,提升導出效率;
- 支持多線程導出,進一步提升導出效率;
- 支持直接導出到 FTP、SFTP、HTTP 等網路存儲中;
- 可以輕鬆實現對特殊的格式(如日期格式、貨幣格式等)進行設置;
- 具有完善的文檔和示例支持,容易上手。
三、EasyExcel 導出的基本使用方法
1. 導出簡單 Excel 表格
下面的示例演示了如何使用 EasyExcel 導出一個簡單的 Excel 表格:
public class ExportDemo {
@Test
public void simpleExport() {
// 1. 創建需要導出的 Excel 對象
ExcelWriter excelWriter = EasyExcel.write("demo.xlsx").build();
// 2. 定義導出的表格的表頭和數據集
Sheet sheet1 = new Sheet(1, 0);
sheet1.setSheetName("sheet1");
List<List
以上代碼實現了導出一個簡單的 Excel 表格,通過 ExcelWriter 對象的 write() 方法將數據集寫入到表格中即可完成導出。
2. 導出複雜 Excel 表格
EasyExcel 可以很方便地導出帶有樣式、圖片、超鏈接等複雜 Excel 表格。下面的示例演示了如何使用 EasyExcel 導出帶有圖片、樣式的 Excel 表格:
public class ExportDemo {
@Test
public void complexExport() throws IOException {
// 1. 創建需要導出的 Excel 對象
String fileName = "demo.xlsx";
OutputStream out = new FileOutputStream(fileName);
ExcelWriter excelWriter = EasyExcel.write(out).build();
// 2. 定義導出的表格的表頭和數據集
Sheet sheet = new Sheet(1, 0);
sheet.setSheetName("sheet1");
List<List> data = initData();
sheet.setHead(initHead());
sheet.setAutoWidth(Boolean.TRUE);
// 3.導出圖片到磁碟並且插入到表格中
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
BufferedImage bufferImg = ImageIO.read(new File("D://logo.png"));
ImageIO.write(bufferImg, "png", byteArrayOutputStream);
// 列寬默認值為 1,這裡要定義為圖片的實際長寬值
byte[] imageBytes = byteArrayOutputStream.toByteArray();
Image image = new Image(new ByteArrayInputStream(imageBytes), 5, 5, 3, 7);
sheet.addImage(image);
// 4.導出表格
excelWriter.write1(data, sheet);
excelWriter.finish();
}
private List<List> initData() {
List<List> dataList = new ArrayList();
for (int i = 0; i < 10; i++) {
List item = new ArrayList();
item.add(i);
item.add(i + " 的名稱");
item.add(100 + i);
item.add("https://www.baidu.com");
item.add(new Date());
dataList.add(item);
}
return dataList;
}
private List<List> initHead() {
List<List> head = new ArrayList();
List head0 = new ArrayList();
List head1 = new ArrayList();
List head2 = new ArrayList();
List head3 = new ArrayList();
List head4 = new ArrayList();
head0.add("編號");
head1.add("名稱");
head2.add("價格");
head3.add("超鏈接");
head4.add("日期");
head.add(head0);
head.add(head1);
head.add(head2);
head.add(head3);
head.add(head4);
return head;
}
}
以上代碼首先創建了一個 ExcelWriter 對象,然後定義表頭和數據和圖片等內容,在寫入 Excel 表格時將這些內容一起寫入即可。
3. 設置單元格樣式
EasyExcel 可以非常方便地設置單元格樣式,支持字體、背景顏色、粗體、斜體等樣式設置。下面的示例演示了如何使用 EasyExcel 設置單元格的樣式。
public class StyleDemo {
@Test
public void setStyle() throws IOException {
// 1. 創建需要導出的 Excel 對象
String fileName = "style.xlsx";
OutputStream out = new FileOutputStream(fileName);
ExcelWriter excelWriter = EasyExcel.write(out).build();
// 2. 定義導出的表格的表頭和數據集
Sheet sheet = new Sheet(1, 0);
sheet.setSheetName("sheet1");
List<List> data = initData();
sheet.setHead(initHead());
sheet.setAutoWidth(Boolean.TRUE);
// 3. 設置單元格樣式
WriteCellStyle headCellStyle = new WriteCellStyle();
headCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());
WriteFont headFont = new WriteFont();
headFont.setFontHeightInPoints((short) 14);
headFont.setBold(true);
headCellStyle.setWriteFont(headFont);
headCellStyle.setShrinkToFit(true);
headCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
headCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
// 4. 導出表格
excelWriter.write(data, sheet, headCellStyle);
excelWriter.finish();
}
private List<List> initData() {
List<List> dataList = new ArrayList();
for (int i = 0; i < 10; i++) {
List item = new ArrayList();
item.add(i);
item.add(i + " 的名稱");
item.add(100 + i);
item.add("https://www.baidu.com");
item.add(new Date());
dataList.add(item);
}
return dataList;
}
private List<List> initHead() {
List<List> head = new ArrayList();
List head0 = new ArrayList();
List head1 = new ArrayList();
List head2 = new ArrayList();
List head3 = new ArrayList();
List head4 = new ArrayList();
head0.add("編號");
head1.add("名稱");
head2.add("價格");
head3.add("超鏈接");
head4.add("日期");
head.add(head0);
head.add(head1);
head.add(head2);
head.add(head3);
head.add(head4);
return head;
}
}
以上代碼使用 WriteCellStyle 和 WriteFont 分別設置單元格樣式和字體樣式,在寫入 Excel 表格時將這些樣式一起寫入即可。
4. 導出大批量數據
EasyExcel 通過採用流式寫入的方式,非常適合導出大批量數據,同時支持多線程導出,極大地提升了導出效率。下面的示例演示了如何使用 EasyExcel 導出大批量數據。
public class BigDataDemo {
@Test
public void bigDataExport() {
// 1. 創建需要導出的 Excel 對象
String fileName = "big_data.xlsx";
ExcelWriter excelWriter = EasyExcel.write(fileName).build();
// 2. 定義導出的表格的表頭和數據集
Sheet sheet = new Sheet(1, 0);
sheet.setSheetName("Sheet1");
List<List> data = new ArrayList();
for (int i = 0; i < 100000; i++) {
List row = new ArrayList();
row.add(i);
row.add("名稱 " + i);
row.add(new Date());
row.add(200 + i);
row.add("https://www.baidu.com");
data.add(row);
}
// 3. 導出表格
excelWriter.write(data, sheet);
excelWriter.finish();
}
}
以上代碼中,我們演示了如何使用 EasyExcel 導出大批量數據。在生成大數據量時,我們需要注意減少內存佔用,使用流式寫入方式;並且針對不同需求,可以採用多線程導出的方式,提升導出效率。
四、總結
通過以上的介紹,我們可以看到 EasyExcel 導出在 Java 中是非常好用的一個開源庫。它通過採用註解方式定義 Excel 表格屬性和流式寫入方式,極大地簡化了 Excel 的導出操作,同時支持複雜的格式化與樣式設置,對於多種需求場景也都有高效的解決方案。無論是在線上業務中,還是在數據分析處理中,EasyExcel 都是一個非常值得使用的工具。
原創文章,作者:OMQAD,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/361723.html