Java读取Excel 2007文件的方法
在Java中读取Excel 2007(.xlsx)文件,主要有以下几种常用方法:

使用Apache POI库
Apache POI是最流行的Java操作Office文档的库,支持Excel 2007格式。
添加依赖(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>
示例代码
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileInputStream;
import java.io.IOException;
public class ReadExcel2007 {
public static void main(String[] args) {
String filePath = "path/to/your/file.xlsx";
try (FileInputStream fis = new FileInputStream(filePath);
Workbook workbook = new XSSFWorkbook(fis)) {
// 获取第一个工作表
Sheet sheet = workbook.getSheetAt(0);
// 遍历行
for (Row row : sheet) {
// 遍历单元格
for (Cell cell : row) {
switch (cell.getCellType()) {
case STRING:
System.out.print(cell.getStringCellValue() + "\t");
break;
case NUMERIC:
System.out.print(cell.getNumericCellValue() + "\t");
break;
case BOOLEAN:
System.out.print(cell.getBooleanCellValue() + "\t");
break;
case FORMULA:
System.out.print(cell.getCellFormula() + "\t");
break;
default:
System.out.print("\t");
}
}
System.out.println();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
使用EasyExcel库
EasyExcel是阿里巴巴开源的Excel处理库,性能更好,内存占用更小。
添加依赖(Maven)
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.1.1</version>
</dependency>
示例代码
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import java.util.ArrayList;
import java.util.List;
public class ReadExcelWithEasyExcel {
public static void main(String[] args) {
String fileName = "path/to/your/file.xlsx";
// 读取Excel文件
EasyExcel.read(fileName, DataModel.class, new AnalysisEventListener<DataModel>() {
// 存储数据的集合
private List<DataModel> dataList = new ArrayList<>();
@Override
public void invoke(DataModel data, AnalysisContext context) {
dataList.add(data);
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
// 数据读取完成后的操作
System.out.println("读取完成,共读取" + dataList.size() + "条数据");
for (DataModel data : dataList) {
System.out.println(data);
}
}
}).sheet().doRead();
}
// 数据模型类
public static class DataModel {
// 使用@ExcelProperty注解指定列对应的字段
@Override
public String toString() {
return "DataModel{}";
}
}
}
使用JExcelApi库
JExcelApi是另一个轻量级的Java Excel操作库。
添加依赖(Maven)
<dependency>
<groupId>net.sourceforge.jexcelapi</groupId>
<artifactId>jxl</artifactId>
<version>2.6.12</version>
</dependency>
示例代码
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import java.io.File;
import java.io.IOException;
public class ReadExcelWithJExcel {
public static void main(String[] args) {
try {
Workbook workbook = Workbook.getWorkbook(new File("path/to/your/file.xlsx"));
Sheet sheet = workbook.getSheet(0);
for (int i = 0; i < sheet.getRows(); i++) {
for (int j = 0; j < sheet.getColumns(); j++) {
System.out.print(sheet.getCell(j, i).getContents() + "\t");
}
System.out.println();
}
workbook.close();
} catch (IOException | BiffException e) {
e.printStackTrace();
}
}
}
注意事项
- 大文件处理:对于大Excel文件,推荐使用EasyExcel或POI的SAX模式,以避免内存溢出
- 日期格式:Excel中的日期可能需要特殊处理,通常是从1900/1901年开始的天数
- 性能考虑:EasyExcel在处理大文件时性能通常优于POI
- 异常处理:添加适当的异常处理,特别是文件不存在或格式不正确的情况
方法中,Apache POI功能最全面,EasyExcel性能最好,JExcelApi最轻量,根据你的具体需求选择合适的库。

