悠悠楠杉
网站页面
正文:
在企业级应用中,Excel文件的导入导出是高频需求,例如数据报表生成、批量数据录入等场景。Java生态中,Apache POI库是处理Excel文件的首选工具,支持.xls和.xlsx格式。本文将分步骤讲解如何实现这一功能。
首先,在项目中引入Apache POI依赖。如果使用Maven,在pom.xml中添加以下依赖:
<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 org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.util.List;
public class ExcelExporter {
public static void exportToExcel(List<String[]> data, String filePath) {
try (Workbook workbook = new XSSFWorkbook()) {
Sheet sheet = workbook.createSheet("数据报表");
// 创建表头
Row headerRow = sheet.createRow(0);
String[] headers = {"ID", "姓名", "年龄"};
for (int i = 0; i < headers.length; i++) {
Cell cell = headerRow.createCell(i);
cell.setCellValue(headers[i]);
}
// 填充数据
for (int i = 0; i < data.size(); i++) {
Row row = sheet.createRow(i + 1);
String[] rowData = data.get(i);
for (int j = 0; j < rowData.length; j++) {
row.createCell(j).setCellValue(rowData[j]);
}
}
// 写入文件
try (FileOutputStream fos = new FileOutputStream(filePath)) {
workbook.write(fos);
}
System.out.println("Excel导出成功!");
} catch (Exception e) {
e.printStackTrace();
}
}
}
关键点说明:
1. 使用XSSFWorkbook处理.xlsx格式,HSSFWorkbook处理.xls格式。
2. 通过Sheet和Row对象逐行构建表格。
导入功能需要解析Excel文件并转换为Java对象。示例代码如下:
import org.apache.poi.ss.usermodel.*;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class ExcelImporter {
public static List<String[]> importFromExcel(String filePath) {
List<String[]> data = new ArrayList<>();
try (Workbook workbook = WorkbookFactory.create(new File(filePath))) {
Sheet sheet = workbook.getSheetAt(0); // 读取第一个Sheet
for (Row row : sheet) {
if (row.getRowNum() == 0) continue; // 跳过表头
String[] rowData = new String[row.getLastCellNum()];
for (Cell cell : row) {
int columnIndex = cell.getColumnIndex();
switch (cell.getCellType()) {
case STRING -> rowData[columnIndex] = cell.getStringCellValue();
case NUMERIC -> rowData[columnIndex] = String.valueOf(cell.getNumericCellValue());
default -> rowData[columnIndex] = "";
}
}
data.add(rowData);
}
} catch (Exception e) {
e.printStackTrace();
}
return data;
}
}
注意事项:
1. WorkbookFactory自动识别文件格式(.xls或.xlsx)。
2. 通过CellType判断单元格数据类型,避免类型转换错误。
SXSSFWorkbook(流式API)避免内存溢出。