java如何导入excel数据
导入Excel数据的常用方法
在Java中导入Excel数据通常使用Apache POI或JExcelAPI等库。以下是几种常见的方法:
使用Apache POI读取Excel文件
Apache POI支持.xls和.xlsx格式的Excel文件。需要添加以下依赖:
<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文件的示例代码:
import org.apache.poi.ss.usermodel.*;
import java.io.FileInputStream;
public class ExcelReader {
public static void readExcel(String filePath) {
try (Workbook workbook = WorkbookFactory.create(new FileInputStream(filePath))) {
Sheet sheet = workbook.getSheetAt(0);
for (Row row : sheet) {
for (Cell cell : row) {
System.out.print(cell.toString() + "\t");
}
System.out.println();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
使用EasyExcel处理大数据量
EasyExcel是阿里巴巴开源的Excel处理工具,适合处理大文件:

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.3.2</version>
</dependency>
读取示例:
import com.alibaba.excel.EasyExcel;
import java.util.ArrayList;
import java.util.List;
public class EasyExcelReader {
public static void readExcel(String filePath) {
List<Object> data = new ArrayList<>();
EasyExcel.read(filePath)
.sheet()
.doReadSync(data);
data.forEach(System.out::println);
}
}
使用JExcelAPI读取旧格式Excel
JExcelAPI适合处理.xls格式文件:

<dependency>
<groupId>net.sourceforge.jexcelapi</groupId>
<artifactId>jxl</artifactId>
<version>2.6.12</version>
</dependency>
读取示例:
import jxl.Sheet;
import jxl.Workbook;
import java.io.File;
public class JExcelReader {
public static void readExcel(String filePath) {
try {
Workbook workbook = Workbook.getWorkbook(new File(filePath));
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 (Exception e) {
e.printStackTrace();
}
}
}
处理不同类型单元格数据
读取Excel时需要处理不同类型的单元格:
switch (cell.getCellType()) {
case STRING:
System.out.print(cell.getStringCellValue());
break;
case NUMERIC:
if (DateUtil.isCellDateFormatted(cell)) {
System.out.print(cell.getDateCellValue());
} else {
System.out.print(cell.getNumericCellValue());
}
break;
case BOOLEAN:
System.out.print(cell.getBooleanCellValue());
break;
case FORMULA:
System.out.print(cell.getCellFormula());
break;
default:
System.out.print("");
}
性能优化建议
处理大文件时建议使用流式读取:
EasyExcel.read(filePath, new AnalysisEventListener<Object>() {
@Override
public void invoke(Object data, AnalysisContext context) {
// 逐行处理数据
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
// 所有数据解析完成
}
}).sheet().doRead();
这些方法覆盖了Java中处理Excel文件的主要场景,可以根据具体需求选择合适的库和实现方式。






