您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。