在 Java 中读取 Excel 文件

在日常开发中,经常需要从 Excel 文件中读取数据,比如导入用户信息、分析销售数据或处理财务报表。手写 Excel 解析逻辑往往比较复杂,而使用 Spire.XLS for Java 可以大大简化这一过程。

本文将介绍如何使用 Spire.XLS for Java 在 Java 程序中高效读取 Excel 文件,包括:

  1. 常规读取整个工作表
  2. 逐行逐列读取单元格数据
  3. 从输入流(InputStream)中加载 Excel
  4. 大文件读取优化

步骤 1:引入 Spire.XLS for Java

如果使用 Maven 管理项目,可以在 pom.xml 中添加以下依赖:

xml 复制代码
<repositories>
    <repository>
        <id>com.e-iceblue</id>
        <name>e-iceblue</name>
        <url>https://repo.e-iceblue.com/nexus/content/groups/public/</url>
    </repository>
</repositories>
<dependency>
    <groupId>e-iceblue</groupId>
    <artifactId>spire.xls.free</artifactId>
    <version>5.3.0</version>
</dependency>

(如使用付费版本,请替换为对应依赖或直接导入 jar 包。)


步骤 2:读取 Excel 文件

下面的示例展示了如何加载 Excel 文件并读取第一个工作表中的数据。

java 复制代码
import com.spire.xls.*;

public class ReadExcel {
    public static void main(String[] args) {
        // 创建 Workbook 对象
        Workbook workbook = new Workbook();

        // 加载 Excel 文件
        workbook.loadFromFile("Sample.xlsx");

        // 获取第一个工作表
        Worksheet sheet = workbook.getWorksheets().get(0);

        // 读取单元格数据(例如 A1 单元格)
        String value = sheet.getCellRange("A1").getText();
        System.out.println("A1 单元格内容:" + value);
    }
}

步骤 3:逐行逐列读取数据

如果需要读取整个表格,可以使用循环遍历行和列:

java 复制代码
import com.spire.xls.*;

public class ReadExcelRows {
    public static void main(String[] args) {
        Workbook workbook = new Workbook();
        workbook.loadFromFile("Sample.xlsx");
        Worksheet sheet = workbook.getWorksheets().get(0);

        // 获取最大行数和列数
        int rows = sheet.getLastRow();
        int cols = sheet.getLastColumn();

        // 遍历读取数据
        for (int r = 1; r <= rows; r++) {
            for (int c = 1; c <= cols; c++) {
                String text = sheet.getCellRange(r, c).getText();
                System.out.print(text + "\t");
            }
            System.out.println();
        }
    }
}

这样可以完整输出整个工作表的数据。


步骤 4:从 InputStream 读取 Excel

在 Web 应用或微服务中,Excel 文件可能来自 上传流 而不是磁盘文件。这时可以直接从 InputStream 加载:

java 复制代码
import com.spire.xls.*;
import java.io.*;

public class ReadExcelStream {
    public static void main(String[] args) throws Exception {
        // 从输入流中读取 Excel 文件
        InputStream inputStream = new FileInputStream("Sample.xlsx");
        Workbook workbook = new Workbook();
        workbook.loadFromStream(inputStream);

        Worksheet sheet = workbook.getWorksheets().get(0);
        System.out.println("B2 单元格内容:" + sheet.getCellRange("B2").getText());

        inputStream.close();
    }
}

步骤 5:大文件读取优化

对于包含大量数据的 Excel 文件,推荐逐行处理,而不是一次性加载到内存中。Spire.XLS 提供了 按区域读取 的方式,可以只读取部分数据:

java 复制代码
import com.spire.xls.*;

public class ReadLargeExcel {
    public static void main(String[] args) {
        Workbook workbook = new Workbook();
        workbook.loadFromFile("LargeData.xlsx");

        Worksheet sheet = workbook.getWorksheets().get(0);

        // 只读取前 100 行前 10 列
        for (int r = 1; r <= 100; r++) {
            for (int c = 1; c <= 10; c++) {
                System.out.print(sheet.getCellRange(r, c).getText() + "\t");
            }
            System.out.println();
        }
    }
}

这样既能保证效率,也能避免内存占用过大。


总结

本文介绍了如何在 Java 中使用 Spire.XLS for Java 读取 Excel 文件的多种方式:

    1. 常规读取:从磁盘加载 Excel 文件并访问单元格;
    1. 逐行逐列读取:循环遍历工作表中的所有数据;
    1. 流式读取:支持从 InputStream 直接加载 Excel;
    1. 大文件优化:按需读取部分数据,提升效率。

通过这些方法,可以灵活应对不同业务场景中的 Excel 数据读取需求。

相关推荐
rannn_11116 分钟前
【苍穹外卖|Day4】套餐页面开发(新增套餐、分页查询、删除套餐、修改套餐、起售停售)
java·spring boot·后端·学习
qq_124987075320 分钟前
基于JavaWeb的大学生房屋租赁系统(源码+论文+部署+安装)
java·数据库·人工智能·spring boot·计算机视觉·毕业设计·计算机毕业设计
短剑重铸之日26 分钟前
《设计模式》第十一篇:总结
java·后端·设计模式·总结
若鱼19191 小时前
SpringBoot4.0新特性-Observability让生产环境更易于观测
java·spring
觉醒大王1 小时前
强女思维:着急,是贪欲外显的相。
java·论文阅读·笔记·深度学习·学习·自然语言处理·学习方法
努力学编程呀(๑•ี_เ•ี๑)1 小时前
【在 IntelliJ IDEA 中切换项目 JDK 版本】
java·开发语言·intellij-idea
码农小卡拉1 小时前
深入解析Spring Boot文件加载顺序与加载方式
java·数据库·spring boot
向上的车轮1 小时前
为什么.NET(C#)转 Java 开发时常常在“吐槽”Java:checked exception
java·c#·.net
Dragon Wu1 小时前
Spring Security Oauth2.1 授权码模式实现前后端分离的方案
java·spring boot·后端·spring cloud·springboot·springcloud
跳动的梦想家h1 小时前
环境配置 + AI 提效双管齐下
java·vue.js·spring