# Hutool Java工具類庫_ExcelUtil怎么使用
## 一、Hutool工具庫簡介
### 1.1 什么是Hutool
Hutool是一個Java工具類庫,由國內開發者[looly](https://gitee.com/loolly)創建并維護。它提供了豐富的工具方法,涵蓋了文件操作、日期處理、加密解密、HTTP客戶端、Excel操作等常見功能模塊。Hutool的設計目標是減少項目中重復代碼的編寫,提高開發效率。
### 1.2 核心特點
- **零依賴**:絕大多數模塊不依賴第三方庫
- **全面**:覆蓋Java開發中的各類常見操作
- **簡單**:API設計直觀,學習成本低
- **高性能**:經過優化,執行效率高
### 1.3 Excel處理模塊概述
Hutool的`poi`模塊封裝了Apache POI,提供了更簡單的Excel操作API,其中`ExcelUtil`是最核心的Excel工具類。
## 二、ExcelUtil基礎使用
### 2.1 添加Maven依賴
```xml
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.16</version>
</dependency>
<!-- 或者單獨引入poi模塊 -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-poi</artifactId>
<version>5.8.16</version>
</dependency>
// 讀取整個Excel文件
ExcelReader reader = ExcelUtil.getReader("d:/test.xlsx");
List<List<Object>> readAll = reader.read();
// 讀取指定sheet
ExcelReader sheetReader = ExcelUtil.getReader("d:/test.xlsx", "Sheet1");
List<Map<String,Object>> mapList = sheetReader.readAll();
ExcelReader reader = ExcelUtil.getReader("d:/test.xlsx");
// 第一行作為標題行
List<Map<String,Object>> list = reader.read(0, 1);
List<String> row1 = CollUtil.newArrayList("aa", "bb", "cc");
List<String> row2 = CollUtil.newArrayList("dd", "ee", "ff");
List<List<String>> rows = CollUtil.newArrayList(row1, row2);
// 通過工具類創建writer
ExcelWriter writer = ExcelUtil.getWriter("d:/writeTest.xlsx");
// 寫入內容
writer.write(rows);
// 關閉writer
writer.close();
Map<String, Object> row1 = new LinkedHashMap<>();
row1.put("姓名", "張三");
row1.put("年齡", 23);
List<Map<String, Object>> list = CollUtil.newArrayList(row1);
ExcelWriter writer = ExcelUtil.getWriter("d:/writeMapTest.xlsx");
writer.write(list, true);
writer.close();
ExcelWriter writer = ExcelUtil.getWriter("d:/styleTest.xlsx");
// 設置標題樣式
CellStyle headCellStyle = writer.getHeadCellStyle();
headCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
headCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
// 設置內容樣式
CellStyle cellStyle = writer.getCellStyle();
cellStyle.setAlignment(HorizontalAlignment.CENTER);
writer.write(dataList);
writer.close();
// 創建字體
Font font = writer.createFont();
font.setBold(true);
font.setColor(Font.COLOR_RED);
font.setItalic(true);
// 應用字體
CellStyle style = writer.getCellStyle();
style.setFont(font);
// 大數據量寫入
ExcelWriter bigWriter = ExcelUtil.getBigWriter("d:/bigDataTest.xlsx");
// 每次寫入1000條
for (int i = 0; i < 100000; i += 1000) {
List<Map<String, Object>> subList = getSubList(i, 1000);
bigWriter.write(subList);
// 清空內存中的內容
bigWriter.flush();
}
bigWriter.close();
// 使用SXSSFWorkbook,設置rowAccessWindowSize為1000
ExcelWriter writer = ExcelUtil.getWriter("d:/sxssfTest.xlsx", true);
SXSSFWorkbook sxssfWorkbook = (SXSSFWorkbook) writer.getWorkbook();
sxssfWorkbook.setCompressTempFiles(true);
ExcelWriter writer = ExcelUtil.getWriter("d:/mergeTest.xlsx");
// 合并第1行第1列到第1行第5列的單元格
writer.merge(0, 0, 0, 4, "合并標題", true);
writer.write(dataList);
writer.close();
// 設置公式
writer.writeCellValue(0, 5, "SUM(F2:F4)");
public void exportData(HttpServletResponse response) throws IOException {
// 查詢數據
List<User> userList = userService.list();
// 設置響應頭
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("Content-Disposition", "attachment;filename=user_list.xlsx");
// 導出
ExcelWriter writer = ExcelUtil.getWriter(true);
writer.addHeaderAlias("name", "姓名");
writer.addHeaderAlias("age", "年齡");
writer.write(userList, true);
// 輸出到客戶端
writer.flush(response.getOutputStream());
writer.close();
}
public void dynamicExport(HttpServletResponse response, List<String> columns) throws IOException {
List<Map<String, Object>> dataList = getData();
ExcelWriter writer = ExcelUtil.getWriter(true);
// 動態設置列
for (String column : columns) {
writer.addHeaderAlias(column, getColumnName(column));
}
writer.write(dataList, true);
writer.flush(response.getOutputStream());
writer.close();
}
public List<User> importData(MultipartFile file) {
try (InputStream inputStream = file.getInputStream()) {
ExcelReader reader = ExcelUtil.getReader(inputStream);
// 設置標題別名
reader.addHeaderAlias("姓名", "name");
reader.addHeaderAlias("年齡", "age");
List<User> userList = reader.readAll(User.class);
// 數據校驗
for (User user : userList) {
if (user.getAge() < 0) {
throw new RuntimeException("年齡不能為負數");
}
}
return userList;
} catch (IOException e) {
throw new RuntimeException("導入失敗", e);
}
}
public void bigImport(File file) {
ExcelReader reader = ExcelUtil.getReader(file);
// 分批讀取
int batchSize = 1000;
int totalRows = reader.getRowCount();
for (int i = 0; i < totalRows; i += batchSize) {
List<User> batchList = reader.read(i, Math.min(i + batchSize, totalRows), User.class);
processBatch(batchList);
}
reader.close();
}
ExcelUtil.getBigWriter()
@Alias
注解替代動態解析// 使用SXSSF并設置臨時文件壓縮
ExcelWriter writer = ExcelUtil.getBigWriter("d:/big.xlsx");
SXSSFWorkbook workbook = (SXSSFWorkbook) writer.getWorkbook();
workbook.setCompressTempFiles(true);
// 自定義日期格式
CellStyle cellStyle = writer.getCellStyle();
DataFormat dataFormat = writer.getWorkbook().createDataFormat();
cellStyle.setDataFormat(dataFormat.getFormat("yyyy-MM-dd HH:mm:ss"));
特性 | Hutool ExcelUtil | EasyExcel | Apache POI原生 |
---|---|---|---|
易用性 | ★★★★★ | ★★★★☆ | ★★☆☆☆ |
大文件支持 | ★★★★☆ | ★★★★★ | ★★★☆☆ |
功能完整性 | ★★★★☆ | ★★★☆☆ | ★★★★★ |
社區支持 | ★★★★☆ | ★★★☆☆ | ★★★★★ |
通過本文的全面介紹,相信您已經掌握了Hutool ExcelUtil的核心用法。在實際項目中,可以根據具體需求選擇合適的API,結合性能優化建議,實現高效的Excel處理功能。 “`
這篇文章總計約5500字,按照Markdown格式編寫,包含了: 1. 詳細的代碼示例 2. 實際應用場景 3. 性能優化建議 4. 對比分析表格 5. 完整的目錄結構
您可以根據需要調整內容細節或補充更多實際案例。如需進一步擴展某些部分,可以增加: - 更復雜的數據轉換示例 - 與Spring框架的集成方案 - 異常處理的最佳實踐 - 自定義單元格渲染的實現
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。