如何使用Java读取Excel文件到List>格式

引言

在开发过程中,我们经常会遇到需要读取Excel文件并将数据转换成Java对象的需求。Apache POI是一个强大的库,它提供了读取和写入Microsoft Office格式文件的功能,包括Excel。本文将指导你如何使用Apache POI读取Excel文件,并将数据转换为List<Map<String, String>>格式,便于进一步的数据处理和分析。

准备工作

首先,确保你的项目中包含了Apache POI的依赖。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖:

<!--        excel reader-start-->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>5.2.2</version> <!-- 使用你所需的版本号 -->
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>5.2.2</version> <!-- 同上 -->
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.17.1</version> <!-- 使用你所需要的版本 -->
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.17.1</version> <!-- 同上 -->
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.11.0</version> <!-- 使用你需要的版本 -->
        </dependency>
    <!--        excel reader-end -->

步骤详解

下面是使用Apache POI读取Excel文件的具体步骤:

package com.xsz.programmingarsenal.utils;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ExcelReader {
    public static void main(String[] args) {
        try {
            FileInputStream fis = new FileInputStream(new File("C:\\tmp\\test.xlsx"));
            Workbook workbook = new XSSFWorkbook(fis);
            Sheet sheet = workbook.getSheetAt(0); // 假设我们只读取第一个工作表
            List<Map<String, String>> data = new ArrayList<>();

            // 获取第一行作为列头
            Row headerRow = sheet.getRow(0);
            if (headerRow != null) {
                for (int i = 1; i <= sheet.getLastRowNum(); i++) { // 从第二行开始读取数据
                    Row row = sheet.getRow(i);
                    if (row != null) {
                        Map<String, String> rowData = new HashMap<>();
                        for (Cell cell : headerRow) {
                            int colIndex = cell.getColumnIndex();
                            Cell dataCell = row.getCell(colIndex);
                            if (dataCell != null) {
//                                rowData.put(cell.getStringCellValue(), dataCell.getStringCellValue());
                                rowData.put(getStringValue(cell), getStringValue(dataCell));
                            }
                        }
                        data.add(rowData);
                    }
                }
            }

            // 关闭资源
            workbook.close();
            fis.close();

            // 打印结果
            System.out.println(data);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static  String getStringValue(Cell cell ){
        CellType cellType = cell.getCellType();
        String cellValue = null;

        switch (cellType) {
            case STRING:
                cellValue = cell.getStringCellValue();
                break;
            case NUMERIC:
                if (DateUtil.isCellDateFormatted(cell)) {
                    // 如果是日期格式的数值,则转换为日期字符串
                    cellValue = cell.getDateCellValue().toString();
                } else {
                    // 否则,转换为数字字符串
                    cellValue = String.valueOf(cell.getNumericCellValue());
                }
                break;
            case BOOLEAN:
                cellValue = String.valueOf(cell.getBooleanCellValue());
                break;
            case FORMULA:
                // 处理公式单元格
                cellValue = cell.getCellFormula();
                break;
            case BLANK:
                cellValue = ""; // 或者null,取决于你的需求
                break;
            case ERROR:
                cellValue = "ERROR"; // 或者抛出异常,取决于你的需求
                break;
            default:
                throw new IllegalStateException("Unexpected cell type: " + cellType);
        }
        return  cellValue;

// 现在你可以安全地使用cellValue了
    }
}

测试

测试数据

结果

结语

通过上述步骤,你现在已经掌握了如何使用Java和Apache POI库读取Excel文件,并将数据转换为List<Map<String, String>>格式的方法。这种方法非常适合需要对Excel数据进行进一步处理和分析的场景。希望这篇博客能帮助你在日常开发中更加高效地处理Excel文件。

相关推荐
顾北川_野7 分钟前
Android 手机设备的OEM-unlock解锁 和 adb push文件
android·java
江深竹静,一苇以航9 分钟前
springboot3项目整合Mybatis-plus启动项目报错:Invalid bean definition with name ‘xxxMapper‘
java·spring boot
confiself25 分钟前
大模型系列——LLAMA-O1 复刻代码解读
java·开发语言
Wlq041530 分钟前
J2EE平台
java·java-ee
XiaoLeisj37 分钟前
【JavaEE初阶 — 多线程】Thread类的方法&线程生命周期
java·开发语言·java-ee
豪宇刘1 小时前
SpringBoot+Shiro权限管理
java·spring boot·spring
Elaine2023911 小时前
02多线程基础知识
java·多线程
gorgor在码农1 小时前
Redis 热key总结
java·redis·热key
百事老饼干1 小时前
Java[面试题]-真实面试
java·开发语言·面试
customer082 小时前
【开源免费】基于SpringBoot+Vue.JS医院管理系统(JAVA毕业设计)
java·vue.js·spring boot·后端·spring cloud·开源·intellij-idea