
Excel 文件广泛用于存储和交换结构化数据,例如报表、用户提交的表单,以及从其他系统导出的业务记录。在许多 Java 应用程序中,开发者都需要打开 Excel 文件并提取其中的数据,以便进行后续处理。
在 Java 中,“解析 Excel 文件”通常指加载 .xls 或 .xlsx 文件,读取工作表内容,并将单元格值转换为 Java 可用的数据类型,例如字符串、数字或日期。
本文将通过实际示例,介绍如何使用 Spire.XLS for Java 分步解析 Excel 文件,从基础的文本读取到基于数据类型的精确解析,帮助你全面掌握 Excel 数据处理方法。
目录
准备环境
在开始解析 Excel 文件之前,需要将 Spire.XLS for Java 添加到项目中。该库支持 .xls 与 .xlsx 两种格式,并且无需安装 Microsoft Excel。
添加依赖
如果使用 Maven,请在 pom.xml 中添加以下依赖:
<repositories>
<repository>
<id>com.e-iceblue</id>
<name>e-iceblue</name>
<url>https://repo.e-iceblue.cn/repository/maven-public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.xls</artifactId>
<version>16.1.3</version>
</dependency>
</dependencies>
添加完成后,即可在 Java 项目中加载并解析 Excel 文件。
如果未使用 Maven,也可以手动 下载 Spire.XLS for Java,并将其添加到项目依赖中。
在 Java 中加载并解析 Excel 文件
解析 Excel 文件的第一步是将其加载到 Workbook 对象中,然后获取需要读取的工作表。
import com.spire.xls.*;
public class ParseExcel {
public static void main(String[] args) {
Workbook workbook = new Workbook();
workbook.loadFromFile("data.xlsx");
Worksheet sheet = workbook.getWorksheets().get(0);
System.out.println("Worksheet loaded: " + sheet.getName());
}
}
读取结果预览:

上述代码同时适用于 .xls 和 .xlsx 文件。加载工作表后,即可开始遍历行和单元格进行数据读取。
以文本形式读取 Excel 数据(基础解析)
在许多场景中,开发者只需要将 Excel 数据作为文本读取,而无需关心具体数据类型。这种方式实现简单,适用于日志记录、数据展示或快速导入等场景。
将所有单元格读取为字符串
for (int i = 1; i <= sheet.getLastRow(); i++) {
for (int j = 1; j <= sheet.getLastColumn(); j++) {
String cellText = sheet.getCellRange(i, j).getValue();
System.out.print(cellText + "\t");
}
System.out.println();
}
文本读取结果预览:

使用 getValue() 方法返回的是 Excel 中显示的格式化结果。当对数据精度或类型转换要求不高时,这是最便捷的读取方式。
如果你的需求不仅限于读取,还包括修改或编辑 Excel 文件,可以参考单独的教程:如何使用 Spire.XLS 在 Java 中编辑 Excel 文档。
将 Excel 单元格解析为不同数据类型
在数据处理、校验或计算场景中,仅以文本形式读取往往不够。这时需要将单元格值解析为对应的 Java 数据类型。
解析数值类型(int / double / float)
在 Excel 中,许多单元格内部实际上以数值形式存储,即使显示为日期、货币或百分比。
Spire.XLS for Java 提供 getNumberValue() 方法,用于直接读取单元格的底层数值。
CellRange usedRange = sheet.getAllocatedRange();
System.out.println("Raw number values:");
for (int i = usedRange.getRow(); i <= usedRange.getLastRow(); i++) {
for (int j = usedRange.getColumn(); j <= usedRange.getLastColumn(); j++) {
CellRange cell = sheet.getRange().get(i, j);
if (!(Double.isNaN(cell.getNumberValue())))
{
System.out.print(cell.getNumberValue() + "\t");
}
}
System.out.println();
}
数值读取结果预览:

该方法返回单元格中存储的原始数值,不受 Excel 显示格式影响。
根据业务逻辑转换数值类型
读取到数值后,可以根据业务需求转换为合适的 Java 类型:
double numberValue = cell.getNumberValue();
// 转换为 int
int intValue = (int) numberValue;
// 转换为 float
float floatValue = (float) numberValue;
// 保持为 double
double doubleValue = numberValue;
例如,ID、计数器或数量通常使用 int,而价格、余额或测量数据更适合使用 double 或 float。
注意:Excel 中的日期本质上也是数值类型。如果单元格表示日期或时间,建议使用日期相关 API 进行读取,而不要简单地当作普通数值处理。下文将介绍相关方法。
解析日期和时间
在 Excel 中,日期和时间以数值形式存储,但显示效果由单元格格式决定。
Spire.XLS for Java 提供 getDateTimeValue() 方法,可直接将其读取为 Date 对象,便于在 Java 中进行日期处理。
例如,如果某一列用于存储日期,可以按如下方式读取:
CellRange usedRange = sheet.getAllocatedRange();
System.out.println("Date values:");
for (int i = 0; i < usedRange.getRowCount(); i++) {
// 例如读取第 G 列(日期列)
CellRange cell = usedRange.get(String.format("G%d", i + 1));
java.util.Date date = cell.getDateTimeValue();
System.out.println(date);
}
第七列日期读取结果预览:

由于 Excel 日期本质为数值,getDateTimeValue() 会自动将其转换为 Date 对象,适用于报表系统、数据导入或预定义列结构的电子表格。
实际场景中的混合类型解析
在真实业务中,同一列可能包含文本、数字、日期、布尔值或空值等多种数据类型。 此时,可以结合不同 API,根据业务逻辑选择合适的读取方式。
CellRange cell = sheet.getRange().get(2, 1); // B2
// Excel 中显示的格式化文本
String text = cell.getText();
// 原始字符串值
String value = cell.getValue();
// 通用底层值(可能是数字、布尔值、日期等)
Object rawValue = cell.getValue2();
// 如果单元格包含公式
String formula = cell.getFormula();
// 公式计算结果
String evaluated = cell.getEnvalutedValue();
// 数值
double numberValue = cell.getNumberValue();
// 日期值
java.util.Date dateValue = cell.getDateTimeValue();
// 布尔值
boolean booleanValue = cell.getBooleanValue();
在实际开发中,getText() 常作为安全的兜底方案,用于展示、日志记录或数据导出;而在需要数据计算或逻辑判断时,应根据列的语义使用 getNumberValue()、getDateTimeValue() 或 getBooleanValue() 等方法。
这种灵活的解析方式尤其适用于用户上传或结构较为松散的 Excel 文件,有助于避免类型误判,同时保持代码简洁与稳定。
更多类型解析请查看:XlsRange API 参考
实际应用中的常见解析场景
将 Excel 行映射为 Java 对象
常见做法是将 Excel 中的每一行映射为一个 Java 对象(例如 DTO 或实体类)。
例如,一行表示一条产品记录或业务数据,每一列对应对象的一个字段。解析完成后,可以将对象存入 List 中,进行后续处理或写入数据库。
将 Excel 数据读取到集合结构
另一种常见方式是将数据读取为 List<List<Object>> 等集合结构,适用于批量处理、数据校验或数据转换流程。
Spire.XLS for Java 提供简洁的遍历接口,使开发者能够根据列语义灵活读取数值或日期数据,满足不同业务需求。
为什么使用 Spire.XLS for Java 解析 Excel 文件?
在 Java 中解析 Excel 文件时,Spire.XLS for Java 具有以下优势:
- 同时支持 .xls 与 .xlsx 格式
- 无需依赖 Microsoft Excel
- 提供简单直观的文本、数值与日期读取 API
- 适用于服务器端和桌面 Java 应用
这些特性使其成为实际项目中进行 Excel 数据解析的实用选择。
此外,Spire.XLS for Java 还支持向 Excel 工作表写入多种类型的数据。更多内容可参考:如何使用 Java 将数据写入 Excel 文件。
总结
在 Java 应用开发中,解析 Excel 文件是一项常见需求。无论是读取简单文本,还是提取具有准确数据类型的结构化数据,都需要合适的解析方式。
通过使用 Spire.XLS for Java,你可以轻松加载 Excel 文件,以文本形式读取单元格内容,或按数值、日期等类型进行精确解析,并以较少代码实现稳定的数据处理流程。
根据实际业务需求,可以选择基础文本解析或基于类型的数据提取方式,从而安全、高效地将 Excel 数据整合到 Java 应用中。
如需解锁 Spire.XLS for Java 的完整功能(无评估限制),可申请 免费试用许可。
常见问题
Java 可以同时解析 XLS 和 XLSX 文件吗?
可以。Spire.XLS for Java 使用统一 API 同时支持 .xls 与 .xlsx 格式。
以文本读取和按数据类型解析有什么区别?
以文本读取返回的是 Excel 中显示的格式化结果;按数据类型解析则保留原始数值或日期类型,适用于计算与逻辑处理。
解析 Excel 文件是否需要安装 Microsoft Excel?
不需要。Spire.XLS for Java 可独立运行,无需依赖 Microsoft Excel。







