智慧团建网站pc端,南充建设企业网站,南昌公路建设有限公司网站,游戏制作流程重阳#xff0c;需求很常见#xff1a;根据一个已设计好的 Excel 模板#xff08;含样式、公式、合并单元格、表头、页眉页脚等#xff09;#xff0c;往里面填充动态数据#xff0c;然后生成新的 Excel 文件。 2026 年主流的三种方案对比#xff08;基于当前社区使用情…重阳需求很常见根据一个已设计好的 Excel 模板含样式、公式、合并单元格、表头、页眉页脚等往里面填充动态数据然后生成新的 Excel 文件。2026 年主流的三种方案对比基于当前社区使用情况方案推荐指数 (2026)内存占用模板支持度样式/合并/公式/图片学习曲线大文件友好度Maven 依赖大小EasyExcel(阿里)★★★★★极低优秀支持复杂模板填充低★★★★★小Apache POI★★★★☆高最好几乎全能中★★☆☆☆大JXLS(基于 POI)★★★☆☆中很好Jxls 模板语法中★★★☆☆中Fastexcel / Spire.XLS★★☆☆☆低/中中等低/高★★★★☆小/商业2026 年最推荐EasyExcel理由内存友好、API 简洁、模板填充功能成熟、社区活跃、Spring Boot 集成极好。下面直接给你三种主流实现方式的完整代码示例都基于 Spring Boot 项目场景。方案一EasyExcel 模板填充最推荐Maven 依赖最新稳定版 3.x 或 4.x 系列根据 2026 年情况用最新dependencygroupIdcom.alibaba/groupIdartifactIdeasyexcel/artifactIdversion3.3.4/version!-- 或更高版本 --/dependency模板准备excel 模板文件 template.xlsx在模板中用{}或自定义占位符例如单值{date}、{totalAmount}列表竖向填充{.list}或用{{.开头EasyExcel 推荐语法示例模板内容A1 放标题A2 开始表头B3 开始放{name}、{age}等ABC报表标题{title}姓名年龄得分{.students}代码实现Controller 或 Service 中importcom.alibaba.excel.EasyExcel;importcom.alibaba.excel.write.enums.poi.HorizontalAlignment;importcom.alibaba.excel.write.enums.poi.VerticalAlignment;importcom.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;importjavax.servlet.http.HttpServletResponse;importjava.net.URLEncoder;importjava.nio.charset.StandardCharsets;importjava.util.*;RestControllerRequestMapping(/excel)publicclassExcelController{GetMapping(/export-template-fill)publicvoidexportWithTemplate(HttpServletResponseresponse)throwsException{// 1. 准备数据可以从数据库查MapString,ObjectdatanewHashMap();data.put(title,2026年班级成绩汇总);data.put(date,2026-02-03);data.put(total,88);ListMapString,ObjectstudentsnewArrayList();students.add(Map.of(name,张三,age,18,score,95));students.add(Map.of(name,李四,age,19,score,88));students.add(Map.of(name,王五,age,17,score,92));data.put(students,students);// 2. 设置响应头浏览器下载response.setContentType(application/vnd.openxmlformats-officedocument.spreadsheetml.sheet);response.setCharacterEncoding(utf-8);StringfileNameURLEncoder.encode(成绩报表.xlsx,StandardCharsets.UTF_8.toString()).replaceAll(\\,%20);response.setHeader(Content-disposition,attachment;filename*utf-8fileName);// 3. 模板路径放在 resources/templates/ 下StringtemplateFileNametemplates/成绩模板.xlsx;// 4. 核心模板填充写出EasyExcel.write(response.getOutputStream()).withTemplate(templateFileName).registerWriteHandler(newLongestMatchColumnWidthStyleStrategy())// 自适应列宽可选.sheet().doFill(data);// ← 核心方法传入 map 或对象}}高级用法提示EasyExcel 模板填充常见技巧列表横向填充用{{.或指定方向多列表多个.list占位符复杂对象{.user.name}点语法保留样式/公式/合并单元格EasyExcel 会尽量保留图片填充支持FillWrapperImage对象方案二Apache POI 基于模板填充最灵活但内存高依赖dependencygroupIdorg.apache.poi/groupIdartifactIdpoi-ooxml/artifactIdversion5.3.0/version!-- 或更高 --/dependency核心代码片段importorg.apache.poi.xssf.usermodel.XSSFWorkbook;importjava.io.FileInputStream;importjava.io.OutputStream;// 加载模板try(FileInputStreamfisnewFileInputStream(template.xlsx);XSSFWorkbookworkbooknewXSSFWorkbook(fis)){varsheetworkbook.getSheetAt(0);// 填充单值sheet.getRow(1).getCell(1).setCellValue(2026-02-03 重阳);// 填充列表从第3行开始introwIndex3;for(varstudent:students){varrowsheet.getRow(rowIndex)!null?sheet.getRow(rowIndex):sheet.createRow(rowIndex);row.createCell(0).setCellValue(student.getName());row.createCell(1).setCellValue(student.getAge());rowIndex;}// 输出到 response 或文件workbook.write(response.getOutputStream());}优点可以精确控制每个单元格的样式、公式、批注、条件格式等。缺点代码量大内存占用高大文件容易 OOM。方案三快速选择建议场景首选方案大数据量万行EasyExcel复杂样式/公式/图表保留Apache POI需要极致灵活控制单元格Apache POI快速上手、内存敏感EasyExcel想用模板语法如 {var}EasyExcel / JXLS小建议先准备好模板文件占位符用{}或{{}}EasyExcel 推荐测试时把模板放 resources/templates/ 下用 classpath 加载生产环境建议把模板上传到文件服务器或放在 jar 外重阳你现在是想用 EasyExcel 做列表多sheet 填充处理合并单元格 / 图片 / 下拉框导出后自动调整列宽 / 加水印还是遇到具体报错想 debug告诉我你的具体需求或模板样子我可以给你更精确的代码