java 如何导出excel
使用 Apache POI 库导出 Excel
Apache POI 是 Java 操作 Microsoft Office 文件的开源库,支持 Excel 的读写。以下是使用 POI 导出 Excel 的基本方法。
确保项目中已添加 POI 依赖(Maven 示例):
<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>
创建 Excel 文件并写入数据:
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;
public class ExcelExporter {
public static void exportToExcel() throws IOException {
Workbook workbook = new XSSFWorkbook(); // 创建 XLSX 文件
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 outputStream = new FileOutputStream("output.xlsx")) {
workbook.write(outputStream);
}
workbook.close();
}
}
使用 EasyExcel 库导出 Excel
EasyExcel 是阿里开源的 Excel 操作工具,适合大数据量导出,内存占用低。
添加 EasyExcel 依赖(Maven 示例):
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.3.2</version>
</dependency>
通过注解定义导出模型:
import com.alibaba.excel.annotation.ExcelProperty;
public class UserData {
@ExcelProperty("姓名")
private String name;
@ExcelProperty("年龄")
private int age;
// 构造方法、Getter 和 Setter 省略
}
执行导出操作:
import com.alibaba.excel.EasyExcel;
import java.util.ArrayList;
import java.util.List;
public class EasyExcelExporter {
public static void export() {
List<UserData> dataList = new ArrayList<>();
dataList.add(new UserData("张三", 25));
dataList.add(new UserData("李四", 30));
EasyExcel.write("output.xlsx", UserData.class)
.sheet("用户信息")
.doWrite(dataList);
}
}
处理大数据量导出
当数据量较大时,需采用分页查询或流式写入避免内存溢出。
使用 POI 的 SXSSFWorkbook(流式写入):
Workbook workbook = new SXSSFWorkbook(100); // 保留 100 行在内存中
// 后续操作与 XSSFWorkbook 相同
使用 EasyExcel 的分页查询写入:
EasyExcel.write("large_data.xlsx", UserData.class)
.sheet()
.doWrite(() -> {
// 实现分页查询逻辑,返回 Iterable
return fetchDataByPage(pageSize);
});
自定义样式和格式
设置单元格样式(POI 示例):
CellStyle style = workbook.createCellStyle();
Font font = workbook.createFont();
font.setBold(true);
style.setFont(font);
cell.setCellStyle(style);
设置日期格式:
CellStyle dateStyle = workbook.createCellStyle();
CreationHelper createHelper = workbook.getCreationHelper();
dateStyle.setDataFormat(createHelper.createDataFormat().getFormat("yyyy-MM-dd"));
cell.setCellStyle(dateStyle);






