读取本地excel并生成map,key为第一列,value为第二列

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

xml 复制代码
<dependencies>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>5.2.3</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>5.2.3</version>
    </dependency>
</dependencies>

编写 Java 代码:使用 Apache POI 读取 Excel 文件,并将第一列和第二列的数据存储到 Map 中。

示例代码

java 复制代码
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class ExcelReader {
    public static Map<String, String> readExcelToMap(String filePath) throws IOException {
        Map<String, String> map = new HashMap<>();
        try (FileInputStream fis = new FileInputStream(new File(filePath));
             Workbook workbook = new XSSFWorkbook(fis)) {
            // 获取第一个工作表
            Sheet sheet = workbook.getSheetAt(0);
            // 遍历每一行
            for (int i = 0; i <= sheet.getLastRowNum(); i++) {
                Row row = sheet.getRow(i);
                if (row != null) {
                    // 获取第一列单元格
                    Cell keyCell = row.getCell(0);
                    // 获取第二列单元格
                    Cell valueCell = row.getCell(1);
                    if (keyCell != null && valueCell != null) {
                        // 获取键和值
                        String key = getCellValueAsString(keyCell);
                        String value = getCellValueAsString(valueCell);
                        // 将键值对添加到 Map 中
                        map.put(key, value);
                    }
                }
            }
        }
        return map;
    }

    private static String getCellValueAsString(Cell cell) {
        switch (cell.getCellType()) {
            case STRING:
                return cell.getStringCellValue();
            case NUMERIC:
                if (DateUtil.isCellDateFormatted(cell)) {
                    return cell.getDateCellValue().toString();
                } else {
                    return String.valueOf((long) cell.getNumericCellValue());
                }
            case BOOLEAN:
                return String.valueOf(cell.getBooleanCellValue());
            case FORMULA:
                return cell.getCellFormula();
            default:
                return "";
        }
    }

    public static void main(String[] args) {
        String filePath = "path/to/your/excel/file.xlsx";
        try {
            Map<String, String> resultMap = readExcelToMap(filePath);
            // 打印 Map 中的键值对
            for (Map.Entry<String, String> entry : resultMap.entrySet()) {
                System.out.println(entry.getKey() + " : " + entry.getValue());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

代码解释

readExcelToMap 方法:

该方法接受一个 Excel 文件的路径作为参数,返回一个 Map<String, String> 对象。

使用 FileInputStream 读取 Excel 文件,并使用 XSSFWorkbook 创建一个工作簿对象。

获取第一个工作表,并遍历每一行。

对于每一行,获取第一列和第二列的单元格,并将其值作为键值对添加到 Map 中。

getCellValueAsString 方法:

该方法用于将单元格的值转换为字符串类型。

根据单元格的类型(如字符串、数字、布尔值、公式等),采用不同的方式获取其值。

main 方法:

调用 readExcelToMap 方法读取 Excel 文件,并将结果存储在 resultMap 中。

遍历 resultMap,打印其中的键值对。

注意事项

上述代码假设 Excel 文件是 .xlsx 格式,如果是 .xls 格式,需要将 XSSFWorkbook 替换为 HSSFWorkbook。

请将 filePath 替换为实际的 Excel 文件路径。

相关推荐
MY_TEUCK7 小时前
【Java 后端】SpringBoot 登录认证与会话跟踪实战(JWT + Filter/Interceptor)
java·开发语言·spring boot
今天长肉了吗7 小时前
银行风控项目踩坑实录:指标跑了6小时,风险评分全挂了
java
随读手机7 小时前
多式联运信息交互平台完整方案(2026版)
java·ai·eclipse·云计算·区块链
许彰午8 小时前
03-二叉树——从递归遍历到非递归实现
java·算法
nj01288 小时前
Spring 循环依赖详解:三级缓存、早期引用、AOP 代理与懒加载
java·spring·缓存
野生技术架构师8 小时前
2026年最全Java面试题及答案汇总(建议收藏,面试前看这篇就够了)
java·开发语言·面试
一只叫煤球的猫9 小时前
ThreadForge 源码解读一:ThreadScope 如何把并发任务放进清晰边界?
java·面试·开源
洛_尘10 小时前
Python 5:使用库
java·前端·python
程序员小假10 小时前
HTTP3 性能更好,为什么内网微服务依然多用 HTTP2?HTTP2 内网优势是什么?
java·后端
Mr数据杨10 小时前
【Codex】用教案主体模块沉淀标准化教学设计内容
java·开发语言·django·codex·项目开发