You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从同键不同值的HashMap列表生成指定格式Excel表格?

实现两个HashMap生成指定格式Excel的方法

针对你这种键集合一致、值不同的HashMap生成Excel的需求,下面提供两种Java生态里最常用的实现方案:


方案一:使用Apache POI(Java Excel操作标准库)

Apache POI是Java处理Office文档的老牌库,功能全面,适合大多数场景。

1. 引入依赖(Maven)

在pom.xml中添加以下依赖:

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>5.2.5</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.2.5</version>
</dependency>

2. 核心实现代码

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MapToExcel {
    public static void main(String[] args) throws IOException {
        // 初始化你的两个HashMap
        Map<String, String> map1 = new HashMap<>();
        map1.put("t1", "val1");
        map1.put("t2", "val2");
        map1.put("t3", "val3");

        Map<String, String> map2 = new HashMap<>();
        map2.put("t1", "str1");
        map2.put("t2", "str2");
        map2.put("t3", "str3");

        // 把所有Map放到列表里,方便批量处理
        List<Map<String, String>> mapList = new ArrayList<>();
        mapList.add(map1);
        mapList.add(map2);

        // 创建工作簿和工作表
        Workbook workbook = new XSSFWorkbook();
        Sheet sheet = workbook.createSheet("数据");

        // 1. 写入表头:从第一个Map取键(因为键集合一致)
        // 注意:HashMap是无序的,如果需要固定表头顺序,建议改用LinkedHashMap,或者提前定义表头列表
        Row headerRow = sheet.createRow(0);
        int colIndex = 0;
        for (String key : map1.keySet()) {
            Cell cell = headerRow.createCell(colIndex++);
            cell.setCellValue(key);
        }

        // 2. 写入每行数据
        int rowIndex = 1;
        for (Map<String, String> map : mapList) {
            Row dataRow = sheet.createRow(rowIndex++);
            colIndex = 0;
            for (String key : map1.keySet()) { // 用第一个Map的键保证列顺序一致
                Cell cell = dataRow.createCell(colIndex++);
                cell.setCellValue(map.get(key));
            }
        }

        // 自动调整列宽
        for (int i = 0; i < map1.size(); i++) {
            sheet.autoSizeColumn(i);
        }

        // 输出到文件
        try (FileOutputStream fos = new FileOutputStream("output.xlsx")) {
            workbook.write(fos);
        }
        workbook.close();
    }
}

方案二:使用EasyExcel(阿里开源轻量库)

EasyExcel是阿里开源的Excel处理库,相比POI更轻量,内存占用低,适合大数据量场景,代码也更简洁。

1. 引入依赖(Maven)

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.3.2</version>
</dependency>

2. 核心实现代码

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.metadata.WriteSheet;

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

public class MapToExcelEasy {
    public static void main(String[] args) {
        // 初始化你的两个HashMap
        Map<String, String> map1 = new HashMap<>();
        map1.put("t1", "val1");
        map1.put("t2", "val2");
        map1.put("t3", "val3");

        Map<String, String> map2 = new HashMap<>();
        map2.put("t1", "str1");
        map2.put("t2", "str2");
        map2.put("t3", "str3");

        // 准备数据列表
        List<Map<String, String>> dataList = new ArrayList<>();
        dataList.add(map1);
        dataList.add(map2);

        // 定义表头(如果需要固定顺序,这里可以直接指定有序的表头列表)
        List<String> headList = new ArrayList<>(map1.keySet());

        // 写入Excel
        EasyExcel.write("easy_output.xlsx")
                .head(headList)
                .sheet("数据")
                .doWrite(dataList);
    }
}

注意事项

  • 关于顺序:HashMap本身是无序的,如果你的需求要求表头和数据列的顺序和示例完全一致(比如t1、t2、t3的顺序),建议把HashMap换成LinkedHashMap,或者提前手动定义有序的表头列表(比如List<String> heads = Arrays.asList("t1", "t2", "t3")),避免因为哈希表的无序性导致列顺序混乱。
  • 文件格式:上面的代码生成的是.xlsx格式的Excel,如果需要.xls格式,Apache POI可以改用HSSFWorkbook,EasyExcel则不需要改代码,会自动适配。

内容的提问来源于stack exchange,提问作者user2755407

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 13:31:06