# 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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。