报表设计通过模板建立,预先设置好内容、格式,将变化的部分用“占位符”(也可以理解为“字段变量”)替代,导出时系统自动替换为实际内容。占位符是模板中最重要的概念,请务必正确理解。
此功能可用于日常的报表导出、合同生成、单据打印等。目前支持以下几种模板类型:
进入管理中心 - 报表模板页面,点击右上角 [添加],按要求填写/上传模板。上传后可通过 [预览] 查看效果,不满意可调整模板文件后重新上传,最后点击保存。

报表名称即导出文件名称,支持使用
{}包裹的字段变量,如报表-{ziduan}
添加模板后,可在记录详情页使用报表(EXCEL 列表 报表仅在列表页 数据导出 时使用),点击 [更多] - [报表] 打开导出窗口,可下载、查看 PDF(需启用 PDF 导出格式)或在线预览。

各模板类型的编写方式略有不同,请按需阅读
如下是一个简单的 EXCEL 模板示例,它导出了一个订单及其明细列表。模板中以 {} 包裹的内容即“占位符”,以 {} 包裹字段(内部标识)的方式编写,如 {createdOn},也支持 点连接,如 {kehu.dizhi},导出时替换为实际内容。
请注意图片字段导出:一个字段包含多张图片时仅导出第一张;图片(包括二维码、签名)字段必须使用单独的单元格,否则可能导出出错。
? 由于不同 Excel 版本可能存在差异,导致无法正常输出“点连接”字段,出现此问题请尝试将
.替换为$符号

报表除了可以导出实体(记录)自身数据,也可以导出其关联数据,包括明细、审批流程、相关项。这些关联数据的占位符需要在原占位符的基础上添加额外的符号,详见下文。
如果实体有明细实体,可以一并导出(多条明细记录)。在原占位符的基础上添加 .detail 即可,如 {.detail.goodsName}。
如果实体有审批流程,可以一并导出。与明细类似,在原占位符的基础上添加 .approval 即可,如 .approval.approver。审批流程的可用字段如下。
| 字段 | 说明 |
|---|---|
.approval.approver |
审批人 |
.approval.approvedTime |
审批时间 |
.approval.remark |
批注 |
.approval.state |
审批状态(通过/驳回) |
.approval.node |
审批节点/步骤名称 |
系统同时支持在 EXCEL 模板中导出相关记录(即相关项),编写规则为 引用字段.相关项实体.相关项实体的字段。例如有客户、订单两个实体,其中订单通过“所属客户”字段引用客户实体,则可以在客户报表中导出其订单列表:{.belongAccount.SalesOrder.totalAmount}。
? 请注意明细记录、审批流程及相关项(同一实体)只能横向地排列在一行,不能混合排列
从 V4.1 开始支持导出 多引用 字段,编写规则为 多引用字段.本实体.引用实体的字段。例如有客户、联系人两个实体,其中客户有多引用字段“联系人”,则可以在客户报表中导出多个联系人:{.contacts.Account.contactPhone}。
以下示例包含主记录、明细记录、审批流程、相关项。但此示例不能直接使用,需注意以下问题:
B3 单元格 accountId.phone 需要将 . 连接符号替换为 $,即 accountId$phone. 连接符号替换为 $,例如 A7 单元格改为 {$detail.goodsName}. 也需替换,例如 A15 单元格改为 {$accountId$SalesOrder.totalAmount}$
WORD 模板写法与 EXCEL 相似,但有几处不同:
$ 符号@ 符号(包括二维码、签名){detail}(明细记录) 或 {approval}(审批流程)[] 包裹,且字段前无需加 . 或 $ 符号{belongAccount$SalesOrder}建议先用 网页模板 编辑(便于预览),完成后再做成 WORD 格式(两者格式相同)

? 请注意 WORD 模板仅支持
.docx版本文件,不支持.doc
编写方式与 WORD 模板相同,请参考 WORD。另请注意:
模板类型选择“网页”时,点击 [确定]/[下一步] 后自动进入设计器页面:

你还可以为数据列表的 数据导出 配置模板。占位符需添加 . 前缀,如 .OrderNumber,且必须横向排列在同一行,下图是一个列表模板示例。
从 V4.1 开始,你可以单独输出某个字段(占位符前面不加 . 符号),而非以列表形式输出。例如导出客户的订单列表时,将客户名称输出在一个单元格中。
? 本身输出为列表,因此不支持明细记录、审批流程及相关记录

在 列表页面 右上方点击 [更多] - [数据导出],在导出窗口中选择模板,点击 [确定] 下载。
使用 EXCEL 列表需要“允许数据导出”权限,详见 扩展权限

占位符变量用于导出系统值,如当前时间、当前用户、列表自增序号等。支持的变量如下:
| 变量 | 说明 |
|---|---|
__NUMBER |
自增序号(用于列表序号) |
__KEEP |
单元格保持(用于列表单元格保持) |
__CURRENTUSER |
当前登录用户(姓名) |
__CURRENTBIZUNIT |
当前登录用户所在部门(名称) |
__CURRENTDATE |
当前日期 |
__CURRENTDATETIME |
当前日期时间 |
__EXPORTTIMES ~~v4.0 |
报表导出/打印次数(在 EXCEL 列表 模板中不可用) |
占位符变量同样需遵循相应模板类型的编写规则,例如在包含明细列表的报表中需添加
.detail前缀,如.detail.__NUMBER
值转换适用于所有模板类型。在字段后添加值处理函数 {字段#函数} 即可,如 {shuzi#CHINESEYUAN}。支持的函数如下:
| 函数 | 适用字段 | 说明 |
|---|---|---|
#CHINESEYUAN |
整数、小数 | 数字转中文大写(金额),如 壹佰贰拾叁元整 |
#THOUSANDS |
整数、小数 | 数字加千分位,如 1,234 |
#CHINESEDATE |
日期、日期时间 | 日期转中文 |
#SIZE |
图片(包括二维码、签名) | 图片指定大小,如 #SIZE:200 指定宽度为 200(高度会自适应);#SIZE:200*500 指定宽度和高度 |
#CHINESE |
整数、小数、日期、日期时间、时间 | 数字、日期转中文,如 壹佰贰拾叁 2024年09月01日 |
#CHECKBOX |
多选、下拉列表 | 显示为复选框,如需显示为单选框可以使用 #CHECKBOX:2 |
#PICKAT |
分类、日期 | 对于分类:取分类中指定级,如 #PICKAT:1 将取“地区”分类中的第 1 级,即省份。对于日期:取 12345 分别对应 年月日时分 |
#EMPTY |
所有字段 | 字段值为空时显示,如 #EMPTY:无 |
#CLEAR ~~v3.9 |
多行文本 | 当 启用富文本编辑器 时,可以根据模板类型输出格式内容 |
#FORMAT ~~v4.3 |
日期时间 | 指定输出格式,如 #FORMAT:yyyy年MM月dd日 HH时mm分ss秒 |
EXCEL 格式的列表类模板(明细列表、审批流程、相关项、EXCEL 列表)中可以使用 EXCEL 函数。应用在列的函数需至少包含两个单元格才能正确计算,如下图所示。

对于应用在行的函数需特殊编写。请使用 {.__KEEP:(=XXX)} 的方式包裹函数(XXX为实际的函数),如下图所示。

对于明细列表、审批流程、相关项等列表,以及 EXCEL 列表,可在字段变量后添加 :asc(正序)或 :desc(倒序)指定排序,如 {.accountName:desc}。
如有多个排序字段,其排序顺序为在模板中出现的前后顺序
对于 EXCEL、WORD 格式的报表预览,请参考 文档预览 注意事项。
从 V4.1 开始建议使用 ONLYOFFICE 导出 PDF,同时兼具文档预览功能
PDF 导出依赖 LibreOffice,需在服务器上 安装 LibreOffice,并确保 soffice.exe(Windows)或 libreoffice(Linux/Unix)命令可用。
// Windows 验证命令
soffice.exe
// Linux/Unix 验证命令
libreoffice
// 或者通过 JVM 启动参数 LibreofficeBin 指定命令
-DLibreofficeBin=libreoffice7.4
? Linux/Unix 服务器可能还需 安装字体库 才能正常导出 PDF
可以。通过 自定义操作 的导出报表或 FrontJS.DataList.exportReport 方法实现。
在网页报表设计器工具栏点击 <> 编辑源代码按钮,并在源码最后插入以下代码:
<style>
@page {
@bottom-center {
content: "当前页" counter(page) " / 总计页" counter(pages);
}
}
</style>
页码默认显示在页脚中间,如需其他位置,将 @bottom-center 替换为:
@bottom-left 页脚左侧@bottom-center 页脚中间@bottom-right 页脚右侧@top-left 页眉左侧@top-center 页眉中间@top-right 页眉右侧在网页报表设计器工具栏点击 <> 编辑源代码按钮,并将表格的表头部分使用 <thead> 包裹即可,如下。
原结构:
<table>
<tbody>
<tr>
<td>XX</td>
<td>XX</td>
</tr>
<tr>
<td>XX</td>
<td>XX</td>
</tr>
</tbody>
</table>
替换后(请注意 <thead> 部分):
<table>
<thead>
<tr>
<td>XX</td>
<td>XX</td>
</tr>
</thead>
<tbody>
<tr>
<td>XX</td>
<td>XX</td>
</tr>
</tbody>
</table>