java如何导出excel
使用 Apache POI 库导出 Excel
Apache POI 是 Java 操作 Microsoft Office 文档的流行库,支持 Excel 的读写操作。
确保项目中已添加 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>
创建 Workbook 对象并写入数据:
Workbook workbook = new XSSFWorkbook(); // 创建 HSSFWorkbook 用于 .xls 格式
Sheet sheet = workbook.createSheet("Sheet1");
// 创建表头
Row headerRow = sheet.createRow(0);
headerRow.createCell(0).setCellValue("姓名");
headerRow.createCell(1).setCellValue("年龄");
// 写入数据
Row dataRow = sheet.createRow(1);
dataRow.createCell(0).setCellValue("张三");
dataRow.createCell(1).setCellValue(25);
// 导出文件
try (FileOutputStream fos = new FileOutputStream("output.xlsx")) {
workbook.write(fos);
} catch (IOException e) {
e.printStackTrace();
} finally {
workbook.close();
}
使用 EasyExcel 导出 Excel
EasyExcel 是阿里巴巴开源的 Excel 操作工具,适合大数据量导出,内存占用低。
添加 EasyExcel 依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.3.2</version>
</dependency>
定义数据模型类:
@Data
public class UserData {
@ExcelProperty("姓名")
private String name;
@ExcelProperty("年龄")
private Integer age;
}
执行导出操作:
List<UserData> dataList = Arrays.asList(
new UserData("张三", 25),
new UserData("李四", 30)
);
String fileName = "output.xlsx";
EasyExcel.write(fileName, UserData.class)
.sheet("用户数据")
.doWrite(dataList);
使用 JExcelAPI 导出 Excel
JExcelAPI 是另一个轻量级 Excel 操作库,适合处理 .xls 格式。
添加 JExcelAPI 依赖:
<dependency>
<groupId>net.sourceforge.jexcelapi</groupId>
<artifactId>jxl</artifactId>
<version>2.6.12</version>
</dependency>
导出代码示例:
WritableWorkbook workbook = Workbook.createWorkbook(new File("output.xls"));
WritableSheet sheet = workbook.createSheet("Sheet1", 0);
// 添加表头
Label label1 = new Label(0, 0, "姓名");
Label label2 = new Label(1, 0, "年龄");
sheet.addCell(label1);
sheet.addCell(label2);
// 添加数据
Label nameLabel = new Label(0, 1, "张三");
Label ageLabel = new Label(1, 1, "25");
sheet.addCell(nameLabel);
sheet.addCell(ageLabel);
workbook.write();
workbook.close();
导出 Excel 到 HTTP 响应
在 Web 应用中直接导出 Excel 到浏览器响应:
@GetMapping("/export")
public void exportExcel(HttpServletResponse response) throws IOException {
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment;filename=output.xlsx");
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("Sheet1");
// 写入数据...
workbook.write(response.getOutputStream());
workbook.close();
}
处理大数据量导出
对于大数据量导出,建议采用分批处理方式:
// 使用 SXSSFWorkbook 优化内存
Workbook workbook = new SXSSFWorkbook(100); // 保留100行在内存中
Sheet sheet = workbook.createSheet("大数据");
// 分批查询数据并写入
int batchSize = 1000;
int rowNum = 0;
while (hasMoreData()) {
List<Data> batchData = fetchData(batchSize);
for (Data data : batchData) {
Row row = sheet.createRow(rowNum++);
// 填充数据...
}
}
// 导出...
每种方法适用于不同场景,Apache POI 功能最全面,EasyExcel 适合大数据量,JExcelAPI 适合旧格式。根据项目需求选择合适方案。







