如何在java程序中导入excel数据
使用Apache POI库导入Excel数据
Apache POI是Java操作Microsoft Office文件的流行库,支持Excel的.xls和.xlsx格式。
确保项目中已添加POI依赖(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文件示例代码:
try (FileInputStream fis = new FileInputStream("data.xlsx");
XSSFWorkbook workbook = new XSSFWorkbook(fis)) {
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");
default -> System.out.print("UNKNOWN\t");
}
}
System.out.println();
}
}
使用EasyExcel处理大数据量
对于大型Excel文件,阿里巴巴的EasyExcel性能更优,内存占用更低。

Maven依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.3.2</version>
</dependency>
监听器模式读取示例:

// 定义数据模型
@Data
public class DemoData {
private String stringData;
private Double numberData;
private Date dateData;
}
// 创建监听器
public class DemoDataListener implements ReadListener<DemoData> {
@Override
public void invoke(DemoData data, AnalysisContext context) {
System.out.println("读取到数据: " + data);
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
System.out.println("所有数据读取完成");
}
}
// 调用读取
String fileName = "large_data.xlsx";
EasyExcel.read(fileName, DemoData.class, new DemoDataListener()).sheet().doRead();
处理日期和特殊格式
Excel中的日期和自定义格式需要特殊处理:
// 日期格式处理
if (DateUtil.isCellDateFormatted(cell)) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
System.out.print(sdf.format(cell.getDateCellValue()));
}
// 公式计算
if (cell.getCellType() == CellType.FORMULA) {
System.out.print(cell.getNumericCellValue());
}
异常处理和性能优化
确保添加适当的异常处理:
try {
// 读取操作
} catch (EncryptedDocumentException e) {
System.err.println("加密文档无法读取");
} catch (IOException e) {
System.err.println("文件读取错误: " + e.getMessage());
}
对于大数据文件:
- 使用SAX模式解析(POI的XSSF和EasyExcel都支持)
- 限制内存中保留的行数
- 考虑分批次处理数据






