
在日常开发中我们经常需要生成格式统一的 Excel 文件比如报表、发票、订单清单、成绩单等。手动创建 Excel 文件不仅效率低而且难以保证样式的一致性。相比之下使用预先设计好的 Excel 模板通过Java代码自动填充数据既省时省力又能确保输出文档专业规范。这种“基于模板生成Excel”的方式特别适用于处理结构固定、数据来源动态的场景比如从数据库导出销售记录、根据用户输入生成报价单、批量生成发票等。本文将介绍如何通过Java实现Excel模板的数据填充与自动化导出。主要涵盖内容如下为什么选择Java编程方式填充Excel模板准备工作Java填充Excel模板的实现方式方法一、替换模板中的占位符文本方法二、使用Smart Marker动态插入数据进阶示例填充自定义数据对象将导出结果保存为PDF可选操作为什么选择Java编程方式填充Excel模板相比手动填充采用Java编程方式按模板生成Excel文件具有多方面的优势提高效率快速处理大量数据节省人力和时间成本。保持样式统一继承模板样式确保文档美观、规范。支持动态数据自动填充来自数据库或接口的实时数据。便于批量生成轻松创建多份文档如报表、发票等。易于集成可嵌入业务系统实现自动化文档处理流程。降低错误率避免手动输入失误提高数据准确性。准备工作1.引入 Spire.XLS for Java库Spire.XLS for Java是一款功能全面的 Excel 操作类库支持读取、编辑、生成、格式化以及导出 Excel 文档。在开始前确保项目中已正确引入该库如果使用 Maven可添加如下依赖当前版本号15.6.3repositories repository idcom.e-iceblue/id namee-iceblue/name urlhttps://repo.e-iceblue.cn/repository/maven-public//url /repository /repositories dependency groupIde-iceblue/groupId artifactIdspire.xls/artifactId version15.6.3/version /dependency或下载 Spire.Xls.jar 并手动将其添加到项目。2.准备 Excel模板文件根据业务需求设计好 Excel 模板。模板中可以包含占位符文本用于简单替换或Smart Marker用于绑定结构化数据。模板应预设好样式、布局和表头确保填充后文档整洁规范。Java填充Excel模板的实现方式方法一、替换模版中的占位符文本适用场景说明当模板结构固定仅需填充个别字段如姓名、职位、日期等时可在模板中设置占位符文字通过程序自动查找并替换这些占位符实现数据的动态填充。实现步骤创建Excel模板新建一个Excel模板文档在模板中预设占位符文字例如{姓名}、{年龄}、{职位}等使用Java查找并替换模板中的占位符文字以下代码展示了如何在模板中查找占位符文字并将其替换为实际数据import com.spire.xls.*; import java.awt.*; import java.util.EnumSet; import java.util.HashMap; public class ReplacePlaceholderText { public static void main(String[] args) { // 打开Excel模板 Workbook workbook new Workbook(); workbook.loadFromFile(占位符模板.xlsx); // 获取指定工作表工作表索引从0开始 Worksheet sheet workbook.getWorksheets().get(0); // 定义要替换的占位符及对应值 HashMapString, Object replacements new HashMap(); replacements.put({姓名}, 张立强); replacements.put({年龄}, 28); replacements.put({职位}, 财务总监); // 在工作表中查找占位符并替换为对应值 for (String placeholder : replacements.keySet()) { Object value replacements.get(placeholder); CellRange[] foundRanges sheet.findAll(placeholder, EnumSet.of(FindType.Text), EnumSet.of(ExcelFindOptions.MatchEntireCellContent)); for (int i 0; i foundRanges.length; i) { CellRange cell foundRanges[i]; cell.setValue2(value); // 高亮替换后的单元格 可选 cell.getStyle().setColor(Color.YELLOW); } } // 保存结果文件 workbook.saveToFile(替换占位符.xlsx, ExcelVersion.Version2016); workbook.dispose(); } }结果文档如图方法二、使用Smart Marker动态插入数据什么是Smart Marker智能标记Smart Marker 是一种用在Excel 模板中的特殊语法标识符用于将外部数据源动态填充到工作表的指定位置。它在模板中以占位符的形式存在程序运行过程中会根据绑定的数据源自动替换为实际内容从而实现批量生成报表、订单、清单等文档。借助 Smart Marker开发者可快速、灵活地将数据自动写入 Excel提高文档生成的效率和自动化程度。Smart Marker语法说明Smart Marker的写法会根据所绑定的数据类型有所不同。每个标记必须单独放置在一个单元格中一个单元格中只能包含一个智能标记不能与其他文本混合使用以确保正确解析和填充数据。常见的语法格式包括变量名将一个单一值插入当前单元格。适用于填充如姓名、日期或编号等基础数据项。示例姓名表示将姓名变量的值插入该单元格。集合对象将一个集合对象中的元素按垂直方向即逐行填充到多个单元格中。适用于批量插入记录如员工姓名、产品名称或订单编号等。示例Language表示将Language集合中的每一项按垂直方向依次填入各行。数据源.字段名用于绑定结构化数据源中的具体字段。数据源可以是数据库查询结果、对象集合、DataTable 等。此语法适用于需要从复杂数据结构中提取字段值进行批量填充的场景。示例Student.Name 表示从名为 Student 的数据源中提取 Name 字段的数据并逐行填充。实现步骤创建Excel模板新建一个Excel模板文档并插入以下Smart Marker智能标记使用Java填充数据到模板以下代码展示了如何创建一个结构化表格DataTable将DataTable数据绑定到模板的Smart Marker智能标记并应用Smart Marker来填充数据到模板import com.spire.xls.ExcelVersion; import com.spire.xls.Workbook; import com.spire.xls.Worksheet; import com.spire.xls.data.table.DataColumn; import com.spire.xls.data.table.DataRow; import com.spire.xls.data.table.DataTable; public class ApplySmartMarker { public static void main(String[] args) throws Exception { // 加载 Excel 模板 Workbook workbook new Workbook(); workbook.loadFromFile(智能标记模板.xlsx); // 获取第一个工作表 Worksheet sheet workbook.getWorksheets().get(0); // 创建一个新的 DataTable 对象并命名为 data DataTable dt new DataTable(); dt.setTableName(data); // 添加三列姓名、年龄、职位 dt.getColumns().add(new DataColumn(姓名)); dt.getColumns().add(new DataColumn(年龄)); dt.getColumns().add(new DataColumn(职位)); // 创建数据行 DataRow row1 dt.newRow(); row1.setString(姓名, 张三); row1.setString(年龄, 28); row1.setString(职位, 销售经理); DataRow row2 dt.newRow(); row2.setString(姓名, 李四); row2.setString(年龄, 32); row2.setString(职位, 市场主管); DataRow row3 dt.newRow(); row3.setString(姓名, 王五); row3.setString(年龄, 25); row3.setString(职位, 技术支持); // 添加数据行到表格中 dt.getRows().add(row1); dt.getRows().add(row2); dt.getRows().add(row3); // 绑定表格的数据 workbook.getMarkerDesigner().addDataTable(data, dt); // 应用Smart Marker填充数据 workbook.getMarkerDesigner().apply(); // 自动调整行高和列宽 可选 //sheet.getAllocatedRange().autoFitRows(); //sheet.getAllocatedRange().autoFitColumns(); // 保存结果文件 workbook.saveToFile(应用智能标记.xlsx, ExcelVersion.Version2016); workbook.dispose(); } }结果文档如图Smart Marker附加设置1.格式复制从以上结果文档中可以看出后两行的格式与前两行不同没有居中这是因为在插入数据的时候没有复制格式。要解决这一问题可以在模版的Smart Marker中添加add:styles参数如下图所示保存模板文档再执行代码结果文档如图2.数据填充方向设置默认情况下Smart Marker的数据填充方向为垂直方向。在模板的Smart Marker中添加horizontal参数即可调整填充方向为水平方向。示例data.姓名(horizontal)进阶示例填充自定义数据对象在实际开发中除了使用基础数据类型和表格数据我们有时还需要将自定义的对象集合填充到 Excel 模板中。下面的代码展示了如何创建一个 Excel 模板定义自定义数据对象并通过 Smart Marker 将对象属性的数据插入到模板中import com.spire.xls.*; import java.util.ArrayList; public class BindCustomObjects { // 定义一个Student类 public static class Student { private String Name; private String Course; private int Score; // 定义构造函数参数包括学生姓名、课程、分数 public Student(String name, String course, int score) { this.Name name; this.Course course; this.Score score; } } public static void main(String[] args) { // 创建Excel模板文档 Workbook workbook new Workbook(); // 获取第一个工作表 Worksheet sheet workbook.getWorksheets().get(0); // 添加表头 sheet.getCellRange(A1).setValue(姓名); sheet.getCellRange(B1).setValue(课程); sheet.getCellRange(C1).setValue(分数); // 添加Smart Marker智能标记 sheet.getCellRange(A2).setValue(Student.Name(add:styles)); sheet.getCellRange(B2).setValue(Student.Course(add:styles)); sheet.getCellRange(C2).setValue(Student.Score(add:styles)); // 设置单元格格式 sheet.getCellRange(A1:C2).getCellStyle().setHorizontalAlignment(HorizontalAlignType.Center); sheet.getCellRange(A1:C1).getCellStyle().getFont().isBold(true); sheet.getCellRange(A1:C1).getCellStyle().getFont().setSize(12); sheet.getCellRange(A2:C2).getCellStyle().getFont().setSize(11); // 创建一个ArrayList来存储Student对象 ArrayListStudent list new ArrayList(); // 添加3个学生对象 list.add(new Student(乔治, 语文, 62)); list.add(new Student(佩琪, 数学, 88)); list.add(new Student(艾米丽, 英语, 95)); // 绑定ArrayList数据到Smart Marker workbook.getMarkerDesigner().addParameter(Student, list); // 应用Smart Marker填充数据 workbook.getMarkerDesigner().apply(); // 保存结果文件 workbook.saveToFile(添加自定义数据类型.xlsx, ExcelVersion.Version2013); workbook.dispose(); } }将导出结果保存为PDF可选操作要将填充后的Excel模板保存为PDF只需使用Workbook.saveToFile()方法并指定格式为FileFormat.PDF即可workbook.saveToFile(添加自定义数据类型.pdf, FileFormat.PDF);总结通过 Java 编程方式填充 Excel 模板可以高效地生成样式一致、数据准确的文档尤其适用于批量生成、自动化导出等场景。借助 Java和Spire.XLS库开发者无需手动构建复杂表格结构即可灵活填充各类动态数据提升办公自动化水平和开发效率。