fastexcel如何基于模板

张开发
2026/6/7 20:56:11 15 分钟阅读
fastexcel如何基于模板
我来为您详细介绍 FastExcel 如何基于模板进行 Excel 生成。FastExcel 模板填充功能FastExcel 提供了强大的模板填充功能可以基于预定义的 Excel 模板文件动态填充数据生成新的 Excel 文件 。---1. 基础模板填充模板文件template.xlsx在 Excel 模板中使用 {属性名} 作为占位符姓名 年龄 部门{name} {age} {dept}代码实现import cn.idev.excel.FastExcel;import cn.idev.excel.write.builder.ExcelWriterBuilder;import cn.idev.excel.write.metadata.fill.FillConfig;// 准备数据MapString, Object data new HashMap();data.put(name, 张三);data.put(age, 28);data.put(dept, 技术部);// 基于模板填充FastExcel.write(output.xlsx).withTemplate(template.xlsx) // 指定模板文件.sheet().doFill(data); // 填充数据---2. 列表数据填充横向/纵向纵向填充默认模板中使用 {.} 表示列表项序号 姓名 成绩{.} {name} {score}// 定义数据类Datapublic class Student {private String name;private Integer score;}// 准备列表数据ListStudent students Arrays.asList(new Student(张三, 90),new Student(李四, 85),new Student(王五, 92));// 纵向填充FastExcel.write(output.xlsx).withTemplate(template.xlsx).sheet().doFill(students);横向填充使用 FillConfig 配置方向import cn.idev.excel.write.metadata.fill.FillConfig;// 创建横向填充配置FillConfig fillConfig FillConfig.builder().forceNewRow(Boolean.FALSE) // 不强制新行.direction(WriteDirectionEnum.HORIZONTAL) // 横向填充.build();// 横向填充FastExcel.write(output.xlsx).withTemplate(template.xlsx).sheet().doFill(students, fillConfig);---3. 复杂模板多列表 单值混合模板结构公司名称: {companyName}统计日期: {date}| 部门 | 人数 | 预算 ||------|------|------|| {deptName} | {deptCount} | {deptBudget} |汇总信息: {summary}代码实现// 1. 填充单值数据公司信息MapString, Object singleData new HashMap();singleData.put(companyName, 科技有限公司);singleData.put(date, 2026-04-10);singleData.put(summary, 共3个部门总预算500万);// 2. 准备列表数据部门信息ListMapString, Object deptList new ArrayList();deptList.add(createDept(技术部, 50, 200万));deptList.add(createDept(销售部, 30, 150万));deptList.add(createDept(人事部, 10, 50万));// 3. 写入ExcelWriter excelWriter FastExcel.write(report.xlsx).withTemplate(template.xlsx).build();WriteSheet writeSheet FastExcel.writerSheet().build();// 先填充单值excelWriter.fill(singleData, writeSheet);// 再填充列表excelWriter.fill(deptList, writeSheet);excelWriter.finish();---4. 高级技巧4.1 多 Sheet 模板填充// 模板中有多个 Sheet分别填充ExcelWriter writer FastExcel.write(output.xlsx).withTemplate(template.xlsx).build();// Sheet1 - 员工信息writer.fill(employeeData, FastExcel.writerSheet(0).build());// Sheet2 - 部门统计writer.fill(deptData, FastExcel.writerSheet(1).build());writer.finish();4.2 自定义填充样式// 在模板中预先设置好样式字体、颜色、边框// FastExcel 会保留模板的所有样式只替换数据4.3 动态行高/合并单元格// 模板中预先设置合并单元格// 填充后自动保持合并结构---5. 完整实战示例场景生成月度销售报表模板文件monthly_report_template.xlsx月份销售报表报表期间: {startDate} 至 {endDate}销售负责人: {manager}产品名称 销售数量 单价 金额{productName} {quantity} {price} {amount}| 合计: | | | {totalAmount} |Java 代码import cn.idev.excel.FastExcel;import cn.idev.excel.ExcelWriter;import cn.idev.excel.write.metadata.WriteSheet;import lombok.Data;import java.math.BigDecimal;import java.util.List;Datapublic class SalesRecord {private String productName;private Integer quantity;private BigDecimal price;private BigDecimal amount;}public class ReportGenerator {public void generateReport(String templatePath, String outputPath,ReportData reportData) {// 1. 准备单值数据MapString, Object headerData new HashMap();headerData.put(startDate, reportData.getStartDate());headerData.put(endDate, reportData.getEndDate());headerData.put(manager, reportData.getManager());headerData.put(totalAmount, reportData.getTotalAmount());// 2. 准备列表数据ListSalesRecord records reportData.getRecords();// 3. 创建写入器ExcelWriter writer FastExcel.write(outputPath).withTemplate(templatePath).build();WriteSheet sheet FastExcel.writerSheet().build();// 4. 先填充表头单值writer.fill(headerData, sheet);// 5. 再填充明细列表writer.fill(records, sheet);// 6. 关闭writer.finish();}}---关键要点总结要点 说明占位符格式 {属性名} 或 {.}列表数据类型 支持 Map 和 Java 对象填充顺序 建议先单值后列表避免格式错乱样式保留 模板中的样式会完全保留性能 流式处理支持大数据量填充更多详细用法可以参考官方文档[https://idev.cn/fastexcel/](https://idev.cn/fastexcel/)

更多文章