java如何读取excel数据
读取Excel数据的方法
Java读取Excel数据可以通过多种库实现,常见的有Apache POI、EasyExcel等。以下是具体实现方式:
使用Apache POI读取Excel
Apache POI是处理Microsoft Office文件格式的Java库,支持.xls和.xlsx格式。
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileInputStream;
import java.io.IOException;
public class ExcelReader {
public static void readExcel(String filePath) throws IOException {
FileInputStream fis = new FileInputStream(filePath);
Workbook workbook = new XSSFWorkbook(fis); // 对于.xlsx文件
// 对于.xls文件使用: Workbook workbook = new HSSFWorkbook(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;
default:
System.out.print("\t");
}
}
System.out.println();
}
workbook.close();
fis.close();
}
}
使用EasyExcel读取Excel
EasyExcel是阿里开源的Excel处理工具,内存消耗低,适合大数据量。
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.listener.ReadListener;
import java.util.ArrayList;
import java.util.List;
public class ExcelReader {
public static void readExcel(String filePath) {
List<Object> dataList = new ArrayList<>();
EasyExcel.read(filePath, new ReadListener<Object>() {
@Override
public void invoke(Object data, AnalysisContext context) {
dataList.add(data);
System.out.println(data);
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
System.out.println("读取完成");
}
}).sheet().doRead();
}
}
处理大数据量的优化方法
当处理大型Excel文件时,需要注意内存优化:
- 使用事件模型(SAX方式)而非DOM方式
- 分批处理数据,避免一次性加载全部数据
- 对于Apache POI,可以使用
SXSSFWorkbook处理.xlsx文件
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileInputStream;
public class LargeExcelReader {
public static void readLargeExcel(String filePath) throws IOException {
FileInputStream fis = new FileInputStream(filePath);
Workbook workbook = new SXSSFWorkbook(new XSSFWorkbook(fis), 100); // 设置rowAccessWindowSize
// 后续读取逻辑与普通Workbook相同
}
}
注意事项
- 不同Excel版本(.xls和.xlsx)需要使用不同的POI类处理
- 读取时注意单元格数据类型,避免类型转换错误
- 资源使用后要及时关闭,防止内存泄漏
- 对于复杂格式的Excel文件,可能需要特殊处理合并单元格等特性
以上方法涵盖了Java读取Excel的主要场景,可以根据具体需求选择合适的库和实现方式。







