使用 EasyExcel 导出 Excel 表头:动态生成表头并根据数据显示

本文将介绍如何使用 EasyExcel 导出 Excel 表头,并根据表头对应的数据动态生成表头。如果表头下没有数据,则不导出该表头内容。

1. 定义实体类

首先,定义一个实体类 ExcelHeader 表示表头,包含表头的名称和对应的数据字段名:

public class ExcelHeader {
    private String name; // 表头名称
    private String field; // 数据字段名

    // 构造方法、getter 和 setter 省略
}

2. 定义导出方法

接下来,定义一个方法 exportExcel,根据实体类列表和数据列表生成 Excel 文件:

public static void exportExcel(List<ExcelHeader> headers, List<Map<String, Object>> data, OutputStream out) {
    // 创建工作簿
    ExcelWriter writer = EasyExcelFactory.getWriter(out);
    Sheet sheet = new Sheet(1, 0);

    // 动态生成表头
    List<String> headerList = new ArrayList<>();
    for (ExcelHeader header : headers) {
        if (hasData(data, header.getField())) {
            headerList.add(header.getName());
        }
    }

    // 写入表头
    writer.writeRow(headerList, sheet);

    // 写入数据
    for (Map<String, Object> rowData : data) {
        List<Object> dataList = new ArrayList<>();
        for (ExcelHeader header : headers) {
            if (hasData(data, header.getField())) {
                dataList.add(rowData.get(header.getField()));
            }
        }
        writer.writeRow(dataList, sheet);
    }

    // 关闭工作簿
    writer.finish();
}

// 判断数据列表中是否存在指定字段的数据
private static boolean hasData(List<Map<String, Object>> data, String field) {
    for (Map<String, Object> rowData : data) {
        if (rowData.containsKey(field) && rowData.get(field) != null) {
            return true;
        }
    }
    return false;
}

3. 使用示例

最后,使用示例演示如何使用 exportExcel 方法:

List<ExcelHeader> headers = new ArrayList<>();
headers.add(new ExcelHeader('姓名', 'name'));
headers.add(new ExcelHeader('性别', 'gender'));
headers.add(new ExcelHeader('年龄', 'age'));

List<Map<String, Object>> data = new ArrayList<>();
Map<String, Object> rowData1 = new HashMap<>();
rowData1.put('name', '张三');
rowData1.put('gender', '男');
rowData1.put('age', 20);
data.add(rowData1);

Map<String, Object> rowData2 = new HashMap<>();
rowData2.put('name', '李四');
rowData2.put('gender', null);
rowData2.put('age', 0);
data.add(rowData2);

ByteArrayOutputStream out = new ByteArrayOutputStream();
exportExcel(headers, data, out);

通过上述代码,最终生成的 Excel 文件将只包含 '姓名' 和 '年龄' 这两个表头,因为 '性别' 表头下存在空数据。

注意:

  • EasyExcel 库需要提前导入项目。
  • 以上代码示例仅供参考,实际使用中需要根据具体情况进行调整。
  • 该方法仅能判断字段值是否为 null,无法判断字段值是否为空字符串。如果需要判断为空字符串,需要修改 hasData 方法的逻辑。

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

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