java easyExce 动态表头列数不固定

发布于:2025-07-07 ⋅ 阅读:(19) ⋅ 点赞:(0)

使用场景

在开发中,可能会碰到多个客户提供不同格式的表单,导致表头不固定。例如,客户上传的 Excel 数据可能包含不同的字段,这些字段会动态变化,此时我们需要一个灵活的处理方案。

步骤

使用 EasyExcel 处理动态表头数据的基本步骤如下:

  1. 定义数据模型:可以用一个 Map 或列表来存放表头和数据。
  2. 动态设置表头:根据数据模型构建需要的表头。
  3. 写入 Excel 文件:使用 EasyExcel 提供的接口,将数据写入 Excel 文件。

示例代码

下面是一个使用 EasyExcel 导出动态表头的简单示例。

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.WriteTable;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class DynamicExcelExport {

    public static void main(String[] args) {
        // 模拟动态表头数据
        List<Map<String, Object>> data = new ArrayList<>();
        data.add(createRow("name", "Alice", "age", 30));
        data.add(createRow("name", "Bob", "age", 25));
        
        // 动态生成表头
        List<String> headers = new ArrayList<>();
        headers.add("姓名");
        headers.add("年龄");

        // 写入 Excel 文件
        String fileName = "dynamicExcel.xlsx";
        EasyExcel.write(fileName)
                .head(createHead(headers))
                .sheet("动态表头")
                .doWrite(data);
    }

    private static Map<String, Object> createRow(String key1, Object value1, String key2, Object value2) {
        Map<String, Object> row = new HashMap<>();
        row.put(key1, value1);
        row.put(key2, value2);
        return row;
    }

    private static List<List<String>> createHead(List<String> headers) {
        List<List<String>> head = new ArrayList<>();
        for (String header : headers) {
            List<String> column = new ArrayList<>();
            column.add(header);
            head.add(column);
        }
        return head;
    }
}

代码说明

  1. 数据模型:我们用 Map<String, Object> 来模拟数据行,列表中的每一个 Map 表示一行数据。
  2. 动态表头:使用一个 List 存储动态表头的名称,在 createHead 方法中将其转换为 EasyExcel 支持的格式。
  3. 写入文件:使用 EasyExcel.write 必须指定文件名和表头信息。

生成 Excel 的流程图

下面是一个简单的 UML 序列图,展示了生成 Excel 的流程。
在这里插入图片描述