读取本地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 文件路径。

相关推荐
橙淮7 小时前
并发编程(六)
java·jvm
拽着尾巴的鱼儿7 小时前
springboot openfeign 自定义feign 接口重试机制
java·spring boot·后端
白露与泡影7 小时前
2026大厂Java面试题大全!牛客网最新版
java·开发语言
EntyIU8 小时前
JVM内存与GC笔记
java·jvm·笔记
XS0301068 小时前
并发编程 六
java·后端
yaoxin5211238 小时前
419. 现代 Java IO 最佳实践 - 写入文本文件
java·windows·python
雪宫街道8 小时前
synchronized 锁的范围:对象锁、类锁与代码块锁
java·jvm·后端·面试
x***r1518 小时前
linux安装 jdk-8u291-linux-x64.tar.gz 详细步骤(解压配置环境变量)
java
极光代码工作室9 小时前
基于SpringBoot的校园论坛系统
java·springboot·web开发·后端开发
XS0301069 小时前
Spring Bean 作用域 & 生命周期
java·后端·spring