在日常开发中,经常需要从 Excel 文件中读取数据,比如导入用户信息、分析销售数据或处理财务报表。手写 Excel 解析逻辑往往比较复杂,而使用 Spire.XLS for Java 可以大大简化这一过程。
本文将介绍如何使用 Spire.XLS for Java 在 Java 程序中高效读取 Excel 文件,包括:
- 常规读取整个工作表
- 逐行逐列读取单元格数据
- 从输入流(InputStream)中加载 Excel
- 大文件读取优化
步骤 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 文件的多种方式:
-
- 常规读取:从磁盘加载 Excel 文件并访问单元格;
-
- 逐行逐列读取:循环遍历工作表中的所有数据;
-
- 流式读取:支持从 InputStream 直接加载 Excel;
-
- 大文件优化:按需读取部分数据,提升效率。
通过这些方法,可以灵活应对不同业务场景中的 Excel 数据读取需求。