java如何读取excel中的数据
读取Excel数据的常用方法
在Java中读取Excel数据可以通过多种方式实现,以下是几种常见的方法:
使用Apache POI库
Apache POI是处理Microsoft Office文件(包括Excel)的流行Java库。支持.xls(HSSF)和.xlsx(XSSF)格式。
添加依赖(Maven)
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.3</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version>
</dependency>
读取.xlsx文件示例
FileInputStream file = new FileInputStream("data.xlsx");
XSSFWorkbook workbook = new XSSFWorkbook(file);
XSSFSheet sheet = workbook.getSheetAt(0);
Iterator<Row> rowIterator = sheet.iterator();
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
Iterator<Cell> cellIterator = row.cellIterator();
while (cellIterator.hasNext()) {
Cell cell = cellIterator.next();
switch (cell.getCellType()) {
case STRING -> System.out.print(cell.getStringCellValue() + "\t");
case NUMERIC -> System.out.print(cell.getNumericCellValue() + "\t");
case BOOLEAN -> System.out.print(cell.getBooleanCellValue() + "\t");
}
}
System.out.println();
}
workbook.close();
file.close();
使用EasyExcel库
EasyExcel是阿里巴巴开源的Excel处理工具,适合大数据量读取,内存消耗低。

添加依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.3.2</version>
</dependency>
使用监听器模式读取
// 定义数据模型
@Data
public class DemoData {
private String string;
private Double number;
private Date date;
}
// 创建监听器
public class DemoDataListener extends AnalysisEventListener<DemoData> {
@Override
public void invoke(DemoData data, AnalysisContext context) {
System.out.println("读取到数据: " + data);
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
System.out.println("读取完成");
}
}
// 调用读取
EasyExcel.read("data.xlsx", DemoData.class, new DemoDataListener()).sheet().doRead();
使用JExcelAPI(适用于旧版.xls)
JExcelAPI是处理Excel 97-2003格式(.xls)的轻量级库。

添加依赖
<dependency>
<groupId>net.sourceforge.jexcelapi</groupId>
<artifactId>jxl</artifactId>
<version>2.6.12</version>
</dependency>
读取示例
Workbook workbook = Workbook.getWorkbook(new File("data.xls"));
Sheet sheet = workbook.getSheet(0);
for (int row = 0; row < sheet.getRows(); row++) {
for (int col = 0; col < sheet.getColumns(); col++) {
Cell cell = sheet.getCell(col, row);
System.out.print(cell.getContents() + "\t");
}
System.out.println();
}
workbook.close();
性能优化建议
对于大型Excel文件(超过10万行),建议采用以下优化措施:
- 使用POI的
SXSSFWorkbook(流式API)或EasyExcel - 设置JVM参数增加内存:
-Xms512m -Xmx1024m - 分批次处理数据,避免一次性加载全部内容
- 关闭自动计算公式:
workbook.setForceFormulaRecalculation(false)
异常处理
需要处理以下常见异常:
try {
// 读取操作
} catch (IOException e) {
System.err.println("文件读取错误: " + e.getMessage());
} catch (InvalidFormatException e) {
System.err.println("文件格式错误: " + e.getMessage());
} catch (Exception e) {
System.err.println("其他错误: " + e.getMessage());
}
以上方法可根据项目需求选择,新项目推荐使用Apache POI或EasyExcel,旧版Excel文件处理可考虑JExcelAPI。






