跳转到内容

模板与表单

系统使用 模板技术 来生成各式文档,通过这种机制,您可以在保证数据准确性的前提下,快速制作出符合公司风格的个性化文档。

模板 是一种预定义的 DOCX/XLSX 文档,用于在生成 PDF 报表时自动插入系统数据。

简单来说,模板就是“文档的蓝图”或“文档的底稿”。

  • 模板里包含了固定的结构、样式和文字(如页眉页脚、表格格式、标题样式等)。
  • 模板里也包含一些占位符(如 <客户名称>、<订单编号>),这些会在生成文档时被系统数据替换。
  • 用户不需要每次都手动排版或复制格式,只要准备好数据,系统就会自动根据模板生成统一、规范的文件。

文件格式、占位符、数据类型与输出格式

Section titled “文件格式、占位符、数据类型与输出格式”
文件格式占位符数据类型输出格式
DOCX1Merge Field报价单
销售合同
送货单
设备维保记录
PDF2
XLSX&=采购单
发票清单
审计日志
PDF
XLSX
CSV3不适用采购单
发票清单
审计日志
IOT 设备记录
CSV

占位符 是一段特殊标记,用来告诉系统在生成文档时,应该在哪里填入以及填入何种数据。简单理解:占位符就是“数据的临时位置”。生成文档时,系统会用真实数据把这些位置填充起来,从而得到一份带有实际内容的 PDF 或 Excel 报表。

合并域(英语:MergeField)是一种使用数据源的数据进行个性化文档的方法。

MergeField 基础说明

类型示例说明
域结果<<customer_legalName>>显示内容
数据源未载入:合并域的 KEY
数据源已载入:合并结果
域代码{ MERGEFIELD FieldName [Switches]}可编辑格式,编辑后必须更新才能生效
{ MERGEFIELD FieldName [Switches] }
语法字段说明
{语法以左花括号开始,固定格式,不可忽略,不可修改
MERGEFIELD固定格式,不可忽略,不可修改
FieldName数据源中的 KEY 或者列标题,大小写敏感,所有可用 KEY 在 此处 查看
Switches域开关,用于格式化域内容的方法,选填参数
}语法以右花括号结束,固定格式,不可忽略,不可修改
{ MERGEFIELD TableStart:xxx }

用于标注后文中以 xxx_ 开头的 FieldName 属于表格数据,主要用于表格批量插入数据。


{ MERGEFIELD TableEnd:xxx }

用于标注表格数据到此为止,与 TableStart 搭配使用。

两种方式:

  1. 光标移至合并域上右击 > 切换域代码
  2. 使用 Alt+F9 切换整个文档的合并域显示方式, Shift+F9 切换当前选中的合并域

在 Microsoft Office 中有两种常用的方式插入合并域:

方法一:导入数据源后插入合并域,适用首次创建模板的用户,快速入门。

  1. 下载模拟数据源。
  2. 点击 选项卡 中的 邮件
  3. 开始邮件合并 命令组 依次点击 选择收件人 → 使用现有列表使用现有数据源的示意图
  4. 选择此前下载好的模拟数据源文件。
  5. 将光标移动到需要插入合并域的位置。
  6. 编写和插入域 命令组 中点击 插入合并域,并选择需要插入的合并域。 插入合并域窗口

方法二:手动创建合并域,更灵活的编辑方式

  1. 点击 选项卡 中的 插入
  2. 找到 文本 命令组 依次 文档部件 → 域使用插入的方式插入合并域
  3. 在弹出的 域窗口 左侧 域名 中选择 MergeField域窗口信息
  4. 填写 域属性 后点击确定

Switches 用于格式化域代码中的数据,可以格式化日期、数字、增加前后缀,其基础语法:

<option> value
option说明备注
\b在域前插入文字只有数据不为空白时才生效
\f在域后插入文字只有数据不为空白时才生效
\@格式化日期只针对日期、时间、日期和时间类型的数据
\#格式化数字只针对数字类型的数据
\*定义域结果需要搭配指定的开关项使用
代码含义示例(日期:2025-09-01T20:09:01.999Z)
yy年份后两位25
yyyy四位年份2025
M月份,不补零8
MM月份,补零08
MMM月份缩写Sep
MMMM月份全称September
d日,不补零1
dd日,补零01
ddd星期缩写Mon
dddd星期全称Monday
h时,12小时制,不补零8
hh时,12小时制,补零08
H时,24小时制,不补零20
HH时,24小时制,补零20
m分,不补零9
mm分,补零09
s秒,不补零1
ss秒,不补零01
a/p上下午标记PM
格式输入数据显示结果备注
#.005.15.10至少2位小数,不足补零
.为小数分隔
#,#.001999.11,999.10带千位分隔,2位小数,不足补零
,为千位分隔,.为小数分隔
#,###.##1999.11,999.1带千位分隔,至多2位小数,不足不补零
,为千位分隔,.为小数分隔
#,0055,00至少2位小数,不足补零
,为小数分隔
#.#,001999.11.999,10带千位分隔,2位小数,不足补零
.为千位分隔,,为小数分隔
#.###,##1999.11.999,1带千位分隔,至多2位小数,不足不补零
.为千位分隔,,为小数分隔
格式开关(大小写、罗马数字、序号等)
Section titled “格式开关(大小写、罗马数字、序号等)”

支持多种语言与文档格式化方式,例:

  • 大写英文字母:Alphabetic
  • 小写英文字母:alphabetic
  • 罗马数字:Roman
  • 中文大写数字:CHINESENUM1/2/3
  • 阿拉伯数字转换为圆圈序号,例如:①②③。通常只支持 1~20 且需要特定字体,否则会出现乱码。
格式说明示例结果
MERGEFORMAT合并格式,用于保留字体、段落等格式{ MERGEFIELD \* MERGEFORMAT }
GB1数字加点序号{ MERGEFIELD %1% \* GB1 }1.
GB2括号序号{ MERGEFIELD %1% \* GB2 }
GB3带圈序号{ MERGEFIELD %1% \* GB3 }
Alphabetic阿拉伯数字转大写英文字母{ MERGEFIELD %27% \* Alphabetic }AA
alphabetic阿拉伯数字转小写英文字母{ MERGEFIELD %1% \* alphabetic }a
CardText转换为英文基数词{ MERGEFIELD %10% \* CardText }ten
DollarText英文金额{ MERGEFIELD %10.5% \* DollarText }ten and 50/100
Hex十六进制表示{ MERGEFIELD %10% \* Hex }A
OrdText英文序数词{ MERGEFIELD %10% \* OrdText }tenth
Ordinal英文序数形式{ MERGEFIELD %10% \* Ordinal }10th
Roman大写罗马数字{ MERGEFIELD %3% \* Roman }
roman小写罗马数字{ MERGEFIELD %3% \* roman }
CHINESENUM1大写简体数字{ MERGEFIELD %67289% \* CHINESENUM1 }六七二八九
CHINESENUM2财务用大写格式{ MERGEFIELD %67289% \* CHINESENUM2 }陆萬柒仟贰佰捌拾玖
CHINESENUM3非财务用大写格式{ MERGEFIELD %67289% \* CHINESENUM3 }六万七千二百八十九
Caps单词首字母大写{ MERGEFIELD %too maker% \* Caps }Too Maker
FirstCap段落首字母大写{ MERGEFIELD %too maker% \* FirstCap }Too Maker
Upper所有字母大写{ MERGEFIELD %too maker% \* Upper }TOO MAKER
Lower所有字母小写{ MERGEFIELD %Too Maker% \* Lower }too maker
  1. 不能在 “域窗口” 的 “域属性” 中填写格式化代码,您应该在 域代码 状态编辑格式化语法。 在 “域窗口” 内填入的格式语法,Office 会进行转义,导致格式错误,例如 \@ 会被转义为 \\@
  2. 确保域代码内的 KEY 是准确的,您可以载入模拟数据后点击 邮件 > 预览结果 进行预览。

为了方便快速入手,我们提供了一些模板以及模拟数据源供您参考使用。

报价单模板 合同模板 送货单模板 设备维保模板 报价单数据源 合同数据源 送货单数据源 设备维保记录数据源

KEY 用于定位具体的数据内容具有以下几种类型:

  1. 常规 KEY:绝大多数 KEY 都属于此类,他们由字母与下划线组成,如 company_legalName
  2. TableStart:xxxTableEnd:xxx:这两个 KEY 为固定结构且必须搭配使用,其中的 xxx 代表 Table 内数据的前缀词,只有与前缀匹配的数据才会被纳入到表格。
  3. 表格 KEY:表格内部的 KEY 由前缀词、字母与下划线组成,如:xxx_name
KEY说明
company_legalName公司法定名称
company_address_tag公司地址中的标签
company_address_country公司地址中的国家代码
company_address_state公司地址中的省/州/市信息
company_address_city公司地址中的城市信息
company_address_district公司地址中的区/县
company_address_street公司地址中的街道信息
company_address_postalCode公司地址中的邮政编码
company_tax_tin公司的纳税识别号
company_tax_billingAddress公司开票地址
company_tax_phone开票资料中的联系电话
company_tax_bank公司开户银行
company_tax_bankAccount银行账号
employee_name单据起草人员的姓名
employee_phone单据起草人员的手机号码
employee_email单据起草人员的联系邮箱
employee_familyName单据起草人员的姓氏
employee_givenName单据起草人员的名字
employee_middleName单据起草人员的中间名
employee_position单据起草人员的职务
customer_legalName客户公司法定名称
customer_address_tag客户公司地址中的标签
customer_address_country客户公司地址中的国家代码
customer_address_state客户公司地址中的省/州/市信息
customer_address_city客户公司地址中的城市信息
customer_address_district客户公司地址中的区/县
customer_address_street客户公司地址中的街道信息
customer_address_postalCode客户公司地址中的邮政编码
customer_tax_tin客户公司的纳税识别号
customer_tax_billingAddress客户公司开票地址
customer_tax_phone客户开票资料中的联系电话
customer_tax_bank客户公司开户银行
customer_tax_bankAccount客户银行账号
customer_contact_name客户联系人的姓名
customer_contact_phone客户联系人的手机号码
customer_contact_email客户联系人的联系邮箱
customer_contact_familyName客户联系人的姓氏
customer_contact_givenName客户联系人的名字
customer_contact_middleName客户联系人的中间名
customer_contact_position客户联系人的职务
KEY说明备注
id报价单 Id至少19位纯数字 Id
orderId编码Id10-11位由数字与字母组合的编码 Id
title报价单标题
inclTotal含税总金额按币种格式化
enclTotal不含税总金额按币种格式化
inclTotalDiscount含税总折扣金额按币种格式化
enclTotalDiscount不含税中折扣金额按币种格式化
taxes税额按币种格式化
inclTotal_capital大写的含税总金额币种对应的大写金额
enclTotal_capital大写的不含税总金额币种对应的大写金额
inclTotalDiscount_capital大写的含税总折扣金额币种对应的大写金额
enclTotalDiscount_capital大写的不含税中折扣金额币种对应的大写金额
taxes_capital大写的税额币种对应的大写金额
currency报价单的币种
remark报价单备注信息
dueInDays报价单有效天数单位:天
dueAtISO8601格式的失效日期
createdAtISO8601格式的创建日期
dueAt_date未格式化的失效日期参阅 MergeField 格式化
createdAt_date未格式化的创建日期
deliveryMethod发货方式
deliveryTimeD/T 交付天数单位:天
payment_lineNumber付款条款序号
payment_name条款名称
payment_dueInDays付款期限,单位:天
payment_dueAt付款截止日期当付款条款未开始追踪时无意义,且会被设置为当前日期往后 X 天,X取决于付款期限
payment_dueAt_date付款截止日期当付款条款未开始追踪时无意义,且会被设置为当前日期往后 X 天,X取决于付款期限
payment_percentage付款百分比
payment_amount应付款金额
payment_anchor付款锚点
payment_{index}_lineNumber子条款序号如果没有子条款则此 KEY 无效
payment_{index}_name子条款名称
payment_{index}_dueInDays子条款付款期限,单位:天
payment_{index}_dueAt子条款付款截止日期当付款条款未开始追踪时无意义,且会被设置为当前日期往后 X 天,X取决于付款期限
payment_{index}_dueAt_date子条款付款截止日期当付款条款未开始追踪时无意义,且会被设置为当前日期往后 X 天,X取决于付款期限
payment_{index}_percentage子条款付款百分比
payment_{index}_amount子条款应付款金额
payment_{index}_anchor子条款付款锚点

表格前缀词:item

KEY说明备注
item_lineNumber序号
item_quantity数量格式化为 0.##,最多2位小数
item_unit单位
item_taxRate税率格式化为百分比,例如:0.13 -> 13%
item_taxAmount税额
item_inclPrice含税单价按币种格式化
item_enclPrice不含税单价按币种格式化
item_discountRate折扣率格式化为百分比,例如:0.01 -> 1%
item_inclDiscount含税折扣额按币种格式化
item_enclDiscount不含税折扣额按币种格式化
item_inclSubTotal含税小计按币种格式化
item_enclSubTotal不含税小计按币种格式化
item_remark备注
item_sku_codesku 编码
item_sku_barcodesku 条形码
item_sku_namesku 名称
item_sku_unitsku 单位
item_sku_specificationsku 规格按 sku 属性格式化,例如:颜色 / 红色;容量 / 16GB

表格前缀词:payment

KEY说明备注
payment_lineNumber付款条款序号
payment_name条款名
payment_dueInDays付款期限单位:天
payment_dueAt付款截止日期当付款条款未开始追踪时无意义,且会被设置为当前日期往后 X 天,X取决于付款期限
payment_dueAt_date付款截止日期当付款条款未开始追踪时无意义,且会被设置为当前日期往后 X 天,X取决于付款期限
payment_percentage付款百分比
payment_amount应付款金额
payment_anchor付款锚点

大部分与报价单常规 KEY 一致,额外包含以下 KEY

KEY说明备注
contractId合同编码Id等同于报价单常规 KEY 中的 orderId
contractNo合同号自定义编号,如果起草时未填写则等同于 contractId
supplementalAgreement补充协议
warrantyClause质保期
signedAtISO8601格式的合同签订时间
signedAt_date未格式化的合同签订时间
signingPlace合同签订地点
deliveryDateISO8601格式的交付日期由签订日期和交付天数推算
deliveryDate_date未格式化的交付日期

报价单表格 KEY一致

KEY说明备注
id送货单 Id至少19位纯数字 Id
orderId编码 Id10-11位由数字与字母组合的 Id
createdAtISO8601格式的创建日期
createdAt_date未格式化的创建日期
signedAtISO8601格式的创建日期
signedAt_date未格式化的创建日期
link_order_id关联的报价单编码 Id使用,作为间隔
link_order_title关联的报价单标题使用,作为间隔
link_contract_id关联的合同编码编号使用,作为间隔
link_contract_title关联的合同标题使用,作为间隔

表格前缀词:item

包含报价单表格 KEY,额外包含以下 KEY

KEY说明备注
item_delivery_lineNumber送货单内的序号
item_delivery_quantity送货数量格式化为 0.##,最多2位小数
item_delivery_unit送货单内的单位
item_delivery_remark送货单内的备注
KEY说明备注
id记录 Id至少19位纯数字 Id
orderId编码 Id10-11位由数字与字母组合的 Id
severity事件紧急度
title事件标题
description描述
startAtISO8601格式的开始时间
startAt_date未格式化的开始时间
endAtISO8601格式的结束时间
endAt_date未格式化的结束时间
createdAtISO8601格式的创建时间
createdAt_date未格式化的创建时间
downtime设备下线时间
device_name设备名称
device_tag设备标签
device_category设备类别
device_model设备型号
device_serialNumber序列号
device_owner所有者/使用者
device_effectiveDate生产日期yyyy-MM-dd格式
device_manufactureDate启用日期yyyy-MM-dd格式
device_warrantyExpireDate过保日期yyyy-MM-dd格式
device_location设备位置
device_address_tag设备地址中的标签完整的地址信息需要使用 KEY 拼接
device_address_country设备地址中的国家代码
device_address_state设备地址中的省/州/市信息
device_address_city设备地址中的城市信息
device_address_district设备地址中的区/县
device_address_street设备地址中的街道信息
device_address_postalCode设备地址中的邮政编码

表格前缀词:record

KEY说明备注
record_key维保表单内 字段 对应的 标题表单中 _ 开头的 字段 会被忽略
record_value表单中记录的数据对于带有选项的字段会渲染为 ☑ xxx☐ xxx

书签 是 Word 提供的一种定位工具,通过在文档的某个位置添加书签,可以在后续阅读文档时快速跳转到该位置。 在系统中主要用于定位和在该位置插入图片。根据文档类型与单据的不同,系统会查找不同的书签执行不同的操作,具体如下:

文档单据书签名操作备注
DOCX送货单
设备维保记录单
signature插入签名板的签名图片需有签名图片才会插入图片
DOCX所有单据类型stamp插入数字签名图章需文档证书才进行数字签名

特殊占位符 与其他文字没有区别,主要用于 PDF 文档的处理。

文档单据标识文字操作备注
PDF所有单据###SIGNATURE_ANCHOR###插入数字签名图章需文档证书才能执行数字签名

在系统中,表单用于设备维修、保养等场景下。它通常由多个字段(输入框、选择项、日期、数值等)组成,用于引导职员逐项完成数据录入。

简单来说,表单就是把“需要做的事”和“需要记录的信息”整理成一个可操作的清单,让设备维护过程更高效、更标准化。

  • 把需要检查的事项(例如:润滑油是否更换、电气接头是否牢固、安全装置是否正常等)列出来;
  • 用户在操作时,只需要按照表单逐项确认、填写或勾选,就能完成检查记录;
  • 系统会根据填写的内容,保存和生成相应的维修/保养记录,确保过程规范、结果可追溯。

表单本质为 JSON 格式的文本文件,您可以使用系统提供的在线编辑器编写或者上传 JSON 格式的文件,也可以使用本地文本编辑器编写表单文件后,将文件命名为 xxxForm.json 并上传至 云存储 的 forms 目录中。

在线编辑器截图

输入框与按钮说明
事件当前编辑的表单属于哪种事件
设备类别可以针对不同设备制作不同的表单,需要 🥈 订阅权限
表单标题
获取当前表单从服务器中加载当前表单,主要用于表单修改
新增字段添加新的字段到表单
提交表单将当前表单内容保存至云存储
重置表单将当前表单内容清空,作用与当前界面,不影响服务器端
预览表单您可以查看当前表单在实际任务阶段的样式

在线编辑器内表单字段说明

标题说明备注
字段表单字段的 key在表单内必须唯一,重复的 key 会被后来者覆盖。
_ 开头的字段在渲染时会被忽略
标题显示在输入框中的标题信息,可以被渲染到模板中
组件用于呈现输入框类型签名板的数值为标识符
日期相关的组件为数字格式的时间戳
数据类型组件所使用的数据格式
默认值当用户不填写字段时使用的默认值,需要与数据类型匹配
多行文本仅文本输入框组件可用,允许用户输入多行文本
选项键选项对应的 key必须唯一
选项值选项对应的数值

手写 JSON 文件需要符合下方的 Json Schema 要求。

{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Generated schema for MaintenanceForm",
"type": "object",
"properties": {
"title": {
"type": "string"
},
"fields": {
"type": "array",
"items": {
"type": "object",
"properties": {
"field": {
"type": "string"
},
"label": {
"type": "string"
},
"component": {
"type": "string",
"enum": [
"textfield",
"checkbox",
"select",
"date",
"datetime",
"number",
"radioColumn",
"radioRow",
"signaturePad",
"upload",
"download",
"hidden"
]
},
"multiline": {
"type": "boolean"
},
"dataType": {
"type": "string",
"enum": [
"string",
"number",
"boolean",
"array",
"null"
]
},
"options": {
"type": "array",
"items": {
"type": "object",
"required": [
"label",
"value"
],
"properties": {
"label": {
"type": "string"
},
"value": {
"type": [
"string",
"number",
"boolean"
]
}
}
}
},
"defaultValue": {
"type": [
"string",
"number",
"boolean",
"array",
"null"
]
}
},
"required": [
"field",
"label",
"component",
"dataType"
],
"allOf": [
{
"if": {
"properties": {
"component": {
"const": "select"
}
}
},
"then": {
"required": [
"options"
]
}
},
{
"if": {
"properties": {
"component": {
"const": "radio"
}
}
},
"then": {
"required": [
"options"
]
}
}
],
"additionalProperties": false
}
}
},
"required": [
"title",
"fields"
]
}

针对不同类别的设备可以创建细分表单,在编辑器中填写/选择设备类别即可创建细分表单,或者在表单文件名中加入 类别

  • 保养事件 -> maintenance_[deviceCategory/设备类别]Form.json
  • 维修事件 -> repair_[deviceCategory/设备类别]Form.json
  • 固件升级事件 -> firmware_update_[deviceCategory/设备类别]Form.json

系统提供的字体:

字体名样式版本
Noto4 Sans所有字重及变体2.015
Noto Sans JP所有字重及变体2.004
Noto Sans SC所有字重及变体2.004
Noto Sans TC所有字重及变体2.004
Noto Sans Symbols所有字重2.003
Noto Sans Symbols2Regular2.008
  1. https://zh.wikipedia.org/zh-cn/Office_Open_XML

  2. https://zh.wikipedia.org/zh-cn/PDF

  3. https://zh.wikipedia.org/zh-cn/%E9%80%97%E5%8F%B7%E5%88%86%E9%9A%94%E5%80%BC

  4. https://fonts.google.com/noto