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

相关推荐
侠客行031719 小时前
Mybatis连接池实现及池化模式
java·mybatis·源码阅读
蛇皮划水怪19 小时前
深入浅出LangChain4J
java·langchain·llm
老毛肚21 小时前
MyBatis体系结构与工作原理 上篇
java·mybatis
风流倜傥唐伯虎21 小时前
Spring Boot Jar包生产级启停脚本
java·运维·spring boot
Yvonne爱编码21 小时前
JAVA数据结构 DAY6-栈和队列
java·开发语言·数据结构·python
Re.不晚21 小时前
JAVA进阶之路——无奖问答挑战1
java·开发语言
你这个代码我看不懂21 小时前
@ConditionalOnProperty不直接使用松绑定规则
java·开发语言
fuquxiaoguang1 天前
深入浅出:使用MDC构建SpringBoot全链路请求追踪系统
java·spring boot·后端·调用链分析
琹箐1 天前
最大堆和最小堆 实现思路
java·开发语言·算法
__WanG1 天前
JavaTuples 库分析
java