java如何生成excel
使用Apache POI库生成Excel文件
Apache POI是Java操作Microsoft Office文件的主流库,支持Excel的.xls和.xlsx格式。
添加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>
创建XSSFWorkbook对象(对应.xlsx格式):
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("Sheet1");
写入数据到单元格:
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellValue("Hello Excel");
设置单元格样式:
CellStyle style = workbook.createCellStyle();
style.setFillForegroundColor(IndexedColors.YELLOW.getIndex());
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
cell.setCellStyle(style);
保存文件到本地:
try (FileOutputStream out = new FileOutputStream("workbook.xlsx")) {
workbook.write(out);
}
使用EasyExcel库生成Excel文件
EasyExcel是阿里开源的Excel操作工具,内存消耗更低,适合大数据量导出。
添加Maven依赖:

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.3.2</version>
</dependency>
定义数据模型:
@Data
public class DemoData {
@ExcelProperty("字符串标题")
private String string;
@ExcelProperty("日期标题")
private Date date;
@ExcelProperty("数字标题")
private Double doubleData;
}
简单写入:
List<DemoData> list = new ArrayList<>();
EasyExcel.write("easyexcel.xlsx", DemoData.class).sheet("模板").doWrite(list);
使用JExcelAPI生成Excel文件
JExcelAPI是较老的Excel操作库,仅支持.xls格式。
添加Maven依赖:
<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 label = new Label(0, 0, "Test");
sheet.addCell(label);
workbook.write();
workbook.close();
性能优化建议
大数据量导出时使用SXSSFWorkbook(POI的流式API):
Workbook workbook = new SXSSFWorkbook(100); // 保留100行在内存中
使用模板方式填充数据,避免频繁创建样式对象。
对于只读场景考虑使用事件模式(POI的Event API)减少内存占用。
文件格式选择
XLS格式(HSSFWorkbook)最大支持65536行数据。
XLSX格式(XSSFWorkbook)支持1048576行数据但内存占用较高。
SXSSFWorkbook通过滑动窗口机制支持超大数据量导出。






