如何使用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文件。

相关推荐
JAVA面经实录9174 小时前
Java企业级工程化·终极完整版背诵手册(无遗漏、全覆盖、面试+落地通用)
java·开发语言·面试
许彰午6 小时前
CacheSQL(二):主从复制——OpLog 环形缓冲区与故障自动恢复
java·数据库·缓存
Bat U7 小时前
JavaEE|多线程初阶(七)
java·开发语言
掌心向暖RPA自动化10 小时前
如何获取网页某个元素在屏幕可见部分的中心坐标影刀RPA懒加载坐标定位技巧
java·javascript·自动化·rpa·影刀rpa
日取其半万世不竭10 小时前
Minecraft Java版社区服务器搭建教程(Linux,适合新手)
java·linux·服务器
TeamDev11 小时前
JxBrowser 9.0.0 版本发布啦!
java·前端·混合应用·jxbrowser·浏览器控件·跨平台渲染·原声输入
AI人工智能+电脑小能手11 小时前
【大白话说Java面试题】【Java基础篇】第24题:Java面向对象有哪些特征
java·开发语言·后端·面试
AI人工智能+电脑小能手11 小时前
【大白话说Java面试题】【Java基础篇】第25题:JDK1.8的新特性有哪些
java·开发语言·后端·面试
likerhood12 小时前
SLF4J: Failed to load class “StaticLoggerBinder“ 解决
java·log4j·maven
早日退休!!!12 小时前
大模型推理瓶颈七层分析模型
java·服务器·数据库