使用 EasyExcel 导出 Excel 可以通过以下步骤实现根据表头对应是否有数据动态导出表头:

  1. 定义实体类作为 Excel 表头,如下所示:
@Data
public class ExcelHeader {
    @ExcelProperty('姓名')
    private String name;

    @ExcelProperty('年龄')
    private Integer age;

    @ExcelProperty('性别')
    private String gender;

    @ExcelProperty('地址')
    private String address;
}
  1. 定义数据类作为 Excel 数据,如下所示:
@Data
public class ExcelData {
    private String name;
    private Integer age;
    private String gender;
    private String address;
}
  1. 使用 EasyExcel 进行导出 Excel,根据表头对应是否有数据动态导出表头,如下所示:
public void exportExcel(List<ExcelData> dataList) {
    // 创建 ExcelWriter
    ExcelWriter excelWriter = new ExcelWriter(response.getOutputStream(), ExcelTypeEnum.XLSX, true);

    // 写入表头
    List<ExcelHeader> headerList = new ArrayList<>();
    headerList.add(new ExcelHeader('姓名'));
    headerList.add(new ExcelHeader('年龄'));
    headerList.add(new ExcelHeader('性别'));
    headerList.add(new ExcelHeader('地址'));

    int headerSize = headerList.size();
    int[] hasData = new int[headerSize]; // 记录每列是否有数据

    WriteSheet writeSheet = EasyExcel.writerSheet().build();
    excelWriter.write(headerList, writeSheet);

    // 写入数据
    for (ExcelData data : dataList) {
        List<Object> rowData = new ArrayList<>();
        for (int i = 0; i < headerSize; i++) {
            String fieldName = headerList.get(i).getName();
            try {
                Object value = PropertyUtils.getProperty(data, fieldName);
                rowData.add(value);
                hasData[i] = 1; // 该列有数据
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        excelWriter.write(rowData, writeSheet);
    }

    // 动态导出表头
    List<ExcelHeader> newHeaderList = new ArrayList<>();
    for (int i = 0; i < headerSize; i++) {
        if (hasData[i] == 1) { // 该列有数据
            newHeaderList.add(headerList.get(i));
        }
    }

    if (newHeaderList.size() < headerSize) { // 如果有列没有数据,则重新写入表头
        excelWriter.write(newHeaderList, writeSheet);
    }

    // 关闭 ExcelWriter
    excelWriter.finish();
}

通过以上步骤,即可根据表头对应是否有数据动态导出表头。在写入数据时,记录每列是否有数据,然后在导出表头时根据记录的信息动态生成表头。如果有列没有数据,则重新写入表头。


原文地址: https://www.cveoy.top/t/topic/nlPk 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录