java如何读取excel
读取Excel文件的常用方法
在Java中读取Excel文件通常使用Apache POI或JExcelAPI等库。以下是几种常见的实现方式:
使用Apache POI读取.xlsx文件(Excel 2007+格式)
Apache POI是处理Microsoft Office文档的流行库。对于.xlsx格式,使用XSSFWorkbook类:
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFCell;
import java.io.FileInputStream;
public class ReadExcel {
public static void main(String[] args) {
try (FileInputStream file = new FileInputStream("example.xlsx")) {
XSSFWorkbook workbook = new XSSFWorkbook(file);
XSSFSheet sheet = workbook.getSheetAt(0);
for (int i = 0; i <= sheet.getLastRowNum(); i++) {
XSSFRow row = sheet.getRow(i);
for (int j = 0; j < row.getLastCellNum(); j++) {
XSSFCell cell = row.getCell(j);
System.out.print(cell.toString() + "\t");
}
System.out.println();
}
workbook.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
使用Apache POI读取.xls文件(Excel 97-2003格式)
对于旧版Excel文件,使用HSSFWorkbook类:
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;
public class ReadOldExcel {
public static void main(String[] args) {
try (FileInputStream file = new FileInputStream("example.xls")) {
HSSFWorkbook workbook = new HSSFWorkbook(file);
HSSFSheet sheet = workbook.getSheetAt(0);
for (int i = 0; i <= sheet.getLastRowNum(); i++) {
HSSFRow row = sheet.getRow(i);
for (int j = 0; j < row.getLastCellNum(); j++) {
HSSFCell cell = row.getCell(j);
System.out.print(cell.toString() + "\t");
}
System.out.println();
}
workbook.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
使用EasyExcel读取大文件
对于大型Excel文件,阿里巴巴的EasyExcel库更高效:
import com.alibaba.excel.EasyExcel;
import java.util.List;
public class ReadLargeExcel {
public static void main(String[] args) {
String fileName = "large_example.xlsx";
EasyExcel.read(fileName, DemoData.class, new DemoDataListener()).sheet().doRead();
}
}
class DemoDataListener implements AnalysisEventListener<DemoData> {
public void invoke(DemoData data, AnalysisContext context) {
System.out.println(data);
}
public void doAfterAllAnalysed(AnalysisContext context) {}
}
处理不同单元格类型
读取单元格时需要处理不同类型的数据:
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;
default:
System.out.print("");
}
Maven依赖配置
使用Apache POI需要添加以下依赖:
<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>
对于EasyExcel:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.1.3</version>
</dependency>
注意事项
- 处理大文件时考虑使用流式读取(如EasyExcel)
- 关闭工作簿和输入流防止资源泄漏
- 处理空单元格和异常情况
- 考虑使用try-with-resources语句自动关闭资源







