java如何读取xls
读取XLS文件的方法
Java可以通过Apache POI库来读取XLS格式的Excel文件。Apache POI是一个流行的Java库,用于处理Microsoft Office格式的文件。
添加依赖
在Maven项目中,需要在pom.xml文件中添加以下依赖:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.3</version>
</dependency>
对于Gradle项目,在build.gradle中添加:
implementation 'org.apache.poi:poi:5.2.3'
基本读取步骤
使用HSSFWorkbook类来处理XLS文件:
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFCell;
import java.io.FileInputStream;
import java.io.IOException;
public class ReadXLS {
public static void main(String[] args) {
try (FileInputStream fis = new FileInputStream("example.xls");
HSSFWorkbook workbook = new HSSFWorkbook(fis)) {
HSSFSheet sheet = workbook.getSheetAt(0);
for (int rowIndex = 0; rowIndex <= sheet.getLastRowNum(); rowIndex++) {
HSSFRow row = sheet.getRow(rowIndex);
if (row != null) {
for (int cellIndex = 0; cellIndex < row.getLastCellNum(); cellIndex++) {
HSSFCell cell = row.getCell(cellIndex);
if (cell != null) {
System.out.print(cell.toString() + "\t");
}
}
System.out.println();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
处理不同类型的数据
XLS文件中的单元格可能包含不同类型的数据:
switch (cell.getCellType()) {
case STRING:
System.out.print(cell.getStringCellValue());
break;
case NUMERIC:
System.out.print(cell.getNumericCellValue());
break;
case BOOLEAN:
System.out.print(cell.getBooleanCellValue());
break;
case FORMULA:
System.out.print(cell.getCellFormula());
break;
default:
System.out.print("");
}
处理日期格式
对于日期类型的单元格:
if (DateUtil.isCellDateFormatted(cell)) {
System.out.print(cell.getDateCellValue());
} else {
System.out.print(cell.getNumericCellValue());
}
读取特定区域
只读取特定行和列范围内的数据:
int startRow = 1;
int endRow = 10;
int startCol = 0;
int endCol = 5;
for (int rowIndex = startRow; rowIndex <= endRow; rowIndex++) {
HSSFRow row = sheet.getRow(rowIndex);
if (row != null) {
for (int cellIndex = startCol; cellIndex <= endCol; cellIndex++) {
HSSFCell cell = row.getCell(cellIndex);
// 处理单元格数据
}
}
}
注意事项
- 确保文件路径正确且有读取权限
- 处理完工作簿后应关闭资源,使用try-with-resources自动管理
- 对于大文件,考虑使用事件驱动的API(如HSSFEventUserModel)以减少内存消耗
- 不同版本的POI可能有API差异,注意版本兼容性
高级特性
对于更复杂的操作,可以:

- 使用
HSSFFormulaEvaluator计算公式结果 - 通过
HSSFDataValidation处理数据验证 - 利用
HSSFHeader和HSSFFooter处理页眉页脚 - 使用
HSSFComment处理单元格注释






