文件导出:Hutool 导出 Excel文件
使用 Hutool 实现 Excel 数据导出。
导出 Excel 文件为两个 Sheet页。
1. 设备基本信息:包括设备编号、设备名称、设备位置等。
2. 设备维护记录:包括设备维护日期、维护人员、维护内容等。
1. Hutool 简介
Hutool 是一个功能丰富的 Java 工具库,其中包含用于 Excel 文件处理的模块 cn.hutool.poi.excel。
在 Apache POI 的基础上进行了封装,使得 Excel 操作更加简洁易用,特别适合快速导出、导入 Excel 文件。
<!-- hutool-poi 相应依赖 --> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-poi</artifactId> <version>5.8.18</version> <!-- 根据最新版本号选择合适版本 --> </dependency>
2. 代码实现
1) 查询数据库中的数据
从数据库中查询设备信息和相应的维护记录。将数据转换为 DTO(数据传输对象),方便导出。
// 查询 t_device 表中的设备信息 List<DeviceEntity> deviceList = deviceMapper.findAllDevices(); // 初始化 List<DeviceExcelDto> deviceExcelDtoList = new ArrayList<>();
2) 遍历设备信息
对每个设备信息(DeviceEntity),进行进一步查询其对应的维护记录(t_device_maintenance表)。将设备维护信息和维护记录封装到 DTO 对象。
// 遍历设备 for (DeviceEntity device : deviceList) { // 查询设备的维护记录 List<DeviceMaintenance> maintenanceList = deviceMapper.findDeviceMaintenance(device.getId()); // 构建设备信息 DTO DeviceExcelDto dto = new DeviceExcelDto(); dto.setDeviceNumber(device.getDeviceNumber()); dto.setDeviceName(device.getDeviceName()); dto.setLocation(device.getLocation()); dto.setStatus(device.getStatus()); // 处理维护记录 for (DeviceMaintenance maintenance : maintenanceList) { dto.setMaintenanceDate(maintenance.getDate()); dto.setMaintenancePerson(maintenance.getPerson()); dto.setMaintenanceContent(maintenance.getContent()); deviceExcelDtoList.add(dto); } }
3) 使用 Hutool 导出 Excel
使用 Hutool 的 ExcelWriter 将DTO对象写入 Excel 文件。将数据分为两个 Sheet页,Sheet1 为 设备基本信息,Sheet2 为 设备维护记录。
// 创建 ExcelWriter ExcelWriter writer = ExcelUtil.getWriter(); // Sheet1:设备基本信息 writer.addHeaderAlias("deviceNumber", "设备编号"); writer.addHeaderAlias("deviceName", "设备名称"); writer.addHeaderAlias("location", "设备位置"); writer.addHeaderAlias("status", "使用状态"); writer.write(deviceExcelDtoList, true); writer.renameSheet(0, "设备基本信息"); // 此处使用 renameSheet() 将 Sheet1改名,否则依然是Sheet1 // Sheet2:设备维护记录 writer.setSheet("设备维护记录"); writer.addHeaderAlias("deviceNumber", "设备编号"); writer.addHeaderAlias("maintenanceDate", "维护日期"); writer.addHeaderAlias("maintenancePerson", "维护人员"); writer.addHeaderAlias("maintenanceContent", "维护内容"); writer.write(deviceExcelDtoList, true);
4) 设置响应头并导出 Excel
将生成的 Excel 文件通过 Http 响应输出给用户。
try { fileName = URLEncoder.encode("设备管理数据", StandardCharsets.UTF_8.toString()); response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx"); ServletOutputStream outputStream = response.getOutputStream(); writer.flush(outputStream, true); outputStream.close(); writer.close(); } catch (IOException e) { e.printStackTrace(); }
如此便实现了一个简洁的设备信息导出功能。
首先,从数据库查询设备信息和维护信息,转为一个 TDO实体,接着使用 Hutool 的 ExcelWriter 将数据写入 Excel 文件的不同 Sheet,最后通过 HTTP 响应 将Excel文件提供。
3. 小结
Hutool 的 Excel 模块为我们提供了一个非常简便的方式来操作 Excel 文件。无论是简单的数据导出,还是复杂的多 Sheet 页,多格式导出,Hutool 都能轻松胜任。