文件导出: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 都能轻松胜任。

 

 


 

posted @ 2024-09-09 18:38  学Java的`Bei  阅读(860)  评论(0编辑  收藏  举报