java 如何控制excel
使用 Apache POI 库操作 Excel
Apache POI 是 Java 操作 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>
创建并写入 Excel 文件
Workbook workbook = new XSSFWorkbook(); // .xlsx 格式
Sheet sheet = workbook.createSheet("Sheet1");
Row row = sheet.createRow(0);
row.createCell(0).setCellValue("Hello");
row.createCell(1).setCellValue("World");
try (FileOutputStream fos = new FileOutputStream("output.xlsx")) {
workbook.write(fos);
}
读取 Excel 文件
Workbook workbook = WorkbookFactory.create(new File("input.xlsx"));
Sheet sheet = workbook.getSheetAt(0);
for (Row row : sheet) {
for (Cell cell : row) {
System.out.print(cell.toString() + "\t");
}
System.out.println();
}
使用 EasyExcel 处理大数据量
EasyExcel 是阿里开源的 Excel 工具,适合大数据量场景(基于 POI 优化)。引入依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.3.2</version>
</dependency>
快速写入示例
List<DemoData> dataList = Arrays.asList(new DemoData("A1"), new DemoData("A2"));
EasyExcel.write("output.xlsx", DemoData.class).sheet().doWrite(dataList);
监听器模式读取(避免内存溢出)
EasyExcel.read("input.xlsx", DemoData.class, new AnalysisEventListener<DemoData>() {
@Override
public void invoke(DemoData data, AnalysisContext context) {
System.out.println(data); // 逐行处理
}
}).sheet().doRead();
使用 JExcelAPI 操作旧版 Excel
JExcelAPI 专用于 .xls 格式,轻量但功能较少:
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();
通过模板引擎生成 Excel
若需复杂格式,可结合模板引擎(如 Thymeleaf、Velocity)生成 HTML,再转换为 Excel。例如使用 Flying Saucer 将 HTML 转 XLS:

String html = "<table><tr><td>Content</td></tr></table>";
OutputStream os = new FileOutputStream("output.xls");
ITextRenderer renderer = new ITextRenderer();
renderer.setDocumentFromString(html);
renderer.layout();
renderer.createPDF(os);
os.close();
注意事项
- 处理大数据时推荐使用 EasyExcel 的流式读写
- 写入公式需调用
cell.setCellFormula("SUM(A1:A10)") - 样式设置通过
CellStyle对象实现(如字体、边框) - 日期格式需特殊处理:
cell.setCellValue(new Date())并设置样式
以上方法覆盖了从基础操作到高性能处理的常见需求,可根据项目复杂度选择合适方案。






