跳转到内容

模板语法

变量是模板中的占位符,生成时会被多维表格记录中的真实数据替换。

用大括号包住准确的字段名:

{Field_Name}

示例:

  • {Customer_Name} → “Acme Corp”
  • {Invoice_Date} → “2024-01-15”
  • {Total_Amount} → “1,500.00”
类别 字段类型 默认输出
文本 文本、邮箱、条码字段 原样输出
数字 数字、货币、进度(%)、评分 按飞书格式(例如 $1,234.56
日期/时间 日期、创建时间、修改时间 按飞书格式(遵循时区设置)
选择 单选、多选 文本 / 逗号分隔
人员 人员、创建人、修改人、群组 显示名称
联系方式 电话、链接 电话号码 / 链接地址
复选框 是/否 true / false
附件 文件与图片 参见动态图片
关联记录 访问关联表中的数据 参见关联记录
查找引用 从关联记录中获取的值 解析后的值
公式 计算字段(文本、数字、日期) 取决于结果类型

使用点号语法访问关联记录中的字段:

{Customer.Name}
{Customer.Address}
{Customer.Email}

最多支持 5 层嵌套:

{Order.Customer.Company.Address.City}

部分字段类型可以通过点号语法访问子属性。不使用点号时,它们会输出默认值。

{Website} → "https://example.com" (链接地址)
{Website.text} → "Example Site" (链接文字)
{Website.link} → "https://example.com" (链接地址)

创建人修改人只含单个用户,可直接使用点号语法。而 User(人员) 字段始终是列表——即使只有一个人——因此 {Assignee.name} 取不到值,请改用下标或循环:

{Created_By} → "John Doe"
{Created_By.name} → "John Doe"
{Created_By.en_name} → "John Doe" (英文名)
{Created_By.id} → "ou_abc123"
{Assignee} → "John Doe, Jane Roe"
{Assignee[0].name} → "John Doe"
{Assignee[0].en_name} → "John Doe" (英文名)
{Assignee[0].id} → "ou_abc123" (飞书用户 ID)

需要列出全部人员时请使用循环:

{#Assignee}
{name} ({en_name})
{/Assignee}
{Office} → "Headquarters, 123 Main St, City"
{Office.name} → "Headquarters"
{Office.full_address} → "123 Main St, City, Country"
{Office.address} → "123 Main St"

群组字段同样是列表,{Team.name} 取不到值,请改用下标或循环:

{Team} → "Engineering, Design" (逗号分隔的群组名)
{Team[0].name} → 第一个群组名
{Team[0].id} → 第一个群组 ID

遍历全部群组请使用循环:

{#Team}
{name} (ID: {id})
{/Team}

多选字段可以循环遍历,也可以用自定义分隔符连接:

{Tags} → "Red, Blue, Green" (默认逗号分隔)
{Tags | join:" / "} → "Red / Blue / Green"
{#Tags}
- {.}
{/Tags}

数字与日期字段(过滤器覆盖格式)

Section titled “数字与日期字段(过滤器覆盖格式)”

数字与日期/时间字段默认按飞书的格式显示。一旦应用过滤器,就会改用原始值(真实数字或时间戳),并完全覆盖飞书的格式:

{Price} → "$1,234.50" (飞书格式)
{Price | number:2} → "1,234.50" (原始数字,重新格式化)
{Price | currency:"EUR":"de-DE"} → "1.234,50 €" (原始数字,德语区格式)
{Date} → "2026/02/26" (飞书格式)
{Date | date:"DD MMM YYYY"} → "26 Feb 2026" (原始时间戳,重新格式化)

未使用过滤器的字段,始终保持飞书的原始格式。

对于关联多条记录的字段,使用循环语法为每一项重复内容:

{#Line_Items}
Product: {Product_Name}
Quantity: {Quantity}
Price: {Price}
{/Line_Items}

{#Field} 开始循环,{/Field} 结束循环。循环内部引用字段时不需要加上父级前缀。

可以用 {/} 代替重复写字段名:

{#Line_Items}
{Product_Name} - {Price}
{/}

当循环标签放在表格行内时,整行会为每一项复制一次——非常适合明细表:

Product Qty Price
{#Line_Items} {Product_Name} {Quantity} {Price} {/Line_Items}

对于简单值(而非对象)组成的数组,用 {.} 引用当前项:

{#Tags}
{.}
{/Tags}

在任意循环内部,可以使用以下特殊变量:

变量 说明 示例
{$index} 当前索引(从 0 开始) 0、1、2 ……
{$num} 行号(从 1 开始) 1、2、3 ……
{$first} 第一项时为 true 输出 true / false
{$last} 最后一项时为 true 输出 true / false

循环可以嵌套。内层循环可以访问外层作用域中的字段:

{#Departments}
Department: {Name}
{#Employees}
{Name} works in {Department.Name}
{/Employees}
{/Departments}

如果同一个字段名在内层和外层都存在,内层优先。

根据字段值显示或隐藏内容。

仅当字段有值时显示内容:

{#if Discount}
Discount applied: {Discount}
{/if}

仅当字段为空时显示内容:

{#if !Notes}
No additional notes.
{/if}
{#if Status == "Approved"}
This invoice has been approved.
{/if}
{#if Status != "Draft"}
This document has been submitted.
{/if}

过滤器用竖线(|)语法改变值的显示方式:

{Field | filterName}
{Field | filterName:"arg1":"arg2"}

过滤器在取到值之后、写入文档之前生效。未使用过滤器时,值按飞书的默认格式显示。

过滤器 说明 示例 输出
upper 转为大写 {Name | upper} ACME CORP
lower 转为小写 {Name | lower} acme corp
capitalize 每个单词首字母大写 {Name | capitalize} Acme Corp
trim 去除首尾空格 {Name | trim} Acme Corp
truncate 截断到指定长度(默认 50) {Description | truncate:16} Lorem ipsum dolo...
pad 用指定字符补位(默认 0 {$num | pad:3} 001

所有数字过滤器都可以接受一个可选的地区参数,用于按地区格式化:

过滤器 参数 示例 输出
number 小数位数、地区 {Price | number:2} 1,234.50
number 小数位数、地区 {Price | number:2:"de-DE"} 1.234,50
currency 货币代码、地区 {Price | currency:"USD"} $1,234.50
currency 货币代码、地区 {Price | currency:"EUR":"de-DE"} 1.234,50 €
currency 货币代码、地区 {Price | currency:"JPY":"ja-JP"} ¥1,235
percent 小数位数、地区 {Rate | percent:1} 45.6%
percent 小数位数、地区 {Rate | percent:1:"de-DE"} 45,6 %

用自定义格式输出日期——当飞书内置格式不符合需求时非常有用。

语法: {Field | date:"format":"timezone":"locale"}

所有参数都是可选的。时区默认为 UTC,地区默认为 en-US

过滤器 参数 示例 输出
date 格式、时区、地区 {Date | date:"DD MMM YYYY"} 26 Feb 2026
date 格式、时区、地区 {Date | date:"dddd, DD MMMM YYYY"} Thursday, 26 February 2026
date 格式、时区、地区 {Date | date:"DD MMMM YYYY":"UTC":"fr-FR"} 26 février 2026
date 格式、时区、地区 {Date | date:"dddd, DD MMMM YYYY":"UTC":"de-DE"} Donnerstag, 26 Februar 2026

支持的日期占位符:

占位符 输出 示例
YYYY 四位年份 2026
MMMM 月份全称(随地区变化) FebruaryfévrierFebruar
MMM 月份缩写(随地区变化) FebfévFeb
MM 两位月份 02
dddd 星期全称(随地区变化) ThursdayDonnerstag木曜日
ddd 星期缩写(随地区变化) ThuDo
DD 两位日期 26
HH 24 小时制小时 15
mm 分钟 30
ss 00

示例:

{Invoice_Date | date:"DD MMM YYYY"} → 26 Feb 2026
{Invoice_Date | date:"YYYY-MM-DD"} → 2026-02-26
{Invoice_Date | date:"MM/DD/YYYY"} → 02/26/2026
{Invoice_Date | date:"DD/MM/YYYY":"Asia/Tokyo"} → 26/02/2026 (东京时区)
{Invoice_Date | date:"dddd, DD MMMM YYYY":"UTC":"ja-JP"} → 木曜日, 26 2月 2026
{Invoice_Date | date:"DD MMMM YYYY":"UTC":"id-ID"} → 26 Februari 2026
过滤器 说明 示例 输出
join 连接数组值(默认 , {Tags | join:" / "} Red / Blue / Green
default 空值时的兜底文本 {Phone | default:"N/A"} N/A

多个过滤器可以用竖线串联,从左到右依次生效:

{Name | trim | upper} → " hello " 变成 "HELLO"
{$num | pad:3} → 1 变成 "001"
{Phone | default:"N/A" | upper} → null 变成 "N/A"

过滤器同样适用于循环变量和当前项引用:

{#Items}
#{$num | pad:3} - {Name | upper}
{/Items}
{#Tags}{. | capitalize}, {/Tags}

把模板中的占位图片替换成附件字段中的真实图片:

  1. 在 Word 模板中插入任意一张图片(作为占位图)。
  2. 右键点击图片 → 编辑替代文字
  3. 在替代文字描述中填写 {FieldName}
  4. 保存模板。

生成时,占位图会被附件字段中的真实图片替换,并保留占位图的尺寸。

对于包含多个附件的字段,可使用索引语法:

{Photo} → 第一张图片(等同于 {Photo[0]})
{Photo[1]} → 第二张图片
{Photo[2]} → 第三张图片

如果附件数量不固定,可以用循环语法,并把 {.} 作为图片的替代文字。每个附件都会展开为一份占位图的副本:

{#Product_Photos}
[替代文字为 {.} 的图片]
{/Product_Photos}

放在表格中时,每个附件会各占一行:

# Photo Filename
{#Product_Photos} {$num} 替代文字:{.} {name} {/Product_Photos}

循环内部可用的属性:

变量 说明 示例
{name} 文件名 photo1.jpg
{type} MIME 类型 image/jpeg
{size} 文件大小(字节) 204800

图片占位符同样可以在循环块中使用,每次迭代都会解析该项对应的图片:

{#Employees}
Name: {Name}
Photo: [替代文字为 {Photo} 的图片]
{/Employees}

根据字段值生成二维码和条形码。配置方式与动态图片相同——通过图片的替代文字设置。

{QR:FieldName}

示例:{QR:Order_ID} 会生成一个包含 Order_ID 值的二维码。

语法 类型 说明
{BARCODE:FieldName} Code128 默认类型,支持字母与数字
{BARCODE128:FieldName} Code128 显式指定 Code128
{BARCODE39:FieldName} Code39 仅支持大写字母与数字
{BARCODEEAN13:FieldName} EAN-13 13 位零售商品码
{BARCODEEAN8:FieldName} EAN-8 8 位短版 EAN
{BARCODEUPCA:FieldName} UPC-A 12 位北美零售码
{BARCODEUPCE:FieldName} UPC-E 压缩版 UPC
{BARCODEITF14:FieldName} ITF-14 物流/整箱条码
{BARCODEDATAMATRIX:FieldName} DataMatrix 二维码,信息密度高
{BARCODEPDF417:FieldName} PDF417 二维码,堆叠线性码

前缀不区分大小写——{qr:Field}{QR:Field} 效果相同。

所有占位符语法在页眉和页脚中同样有效,用法与正文一致。

常见用途:

  • 页眉中的公司名称或 Logo
  • 页脚中的文档编号或日期
  • 动态标题,例如 Invoice for {Customer_Name}

添加方式:插入 → 页眉/页脚 → 编辑,然后输入 {Field_Name} 之类的占位符。

语法 说明
{Field} 普通变量
{Field.Nested} 关联记录字段(点号语法)
{URL.text} / {URL.link} 链接字段子属性
{Created_By.name} / {Assignee[0].name} 人员字段子属性
{Location.name} / {Location.full_address} 地理位置子属性
{Team[0].name} / {Team[0].id} 群组字段子属性
{#Field}...{/Field} 遍历多值字段
{/} 简写结束标签(关闭最近的循环)
{.} 循环中的当前项(用于基础类型数组)
{$index} 循环索引(从 0 开始)
{$num} 行号(从 1 开始)
{$first} / {$last} 是否为首项/末项
{#if Field}...{/if} 条件(非空)
{#if !Field}...{/if} 条件(为空)
{#if Field == "val"}...{/if} 条件(相等)
{#if Field != "val"}...{/if} 条件(不等)
{Field | upper} 过滤器:转大写
{Field | lower} 过滤器:转小写
{Field | capitalize} 过滤器:单词首字母大写
{Field | trim} 过滤器:去除首尾空格
{Field | truncate:30} 过滤器:截断并加省略号
{Field | pad:3} 过滤器:补零
{Field | number:2} 过滤器:指定小数位数
{Field | number:2:"de-DE"} 过滤器:按地区格式化数字
{Field | currency:"USD"} 过滤器:货币格式
{Field | currency:"EUR":"de-DE"} 过滤器:按地区格式化货币
{Field | percent:1} 过滤器:百分比
{Field | date:"DD MMM YYYY"} 过滤器:自定义日期格式
{Field | date:"dddd, MMMM DD":"UTC":"fr-FR"} 过滤器:按地区格式化日期
{Field | join:" / "} 过滤器:用分隔符连接数组
{Field | default:"N/A"} 过滤器:兜底值
{Field | trim | upper} 串联过滤器(从左到右)
{Photo} / {Photo[1]} 图片(通过替代文字)
{QR:Field} 二维码(通过替代文字)
{BARCODE:Field} 条形码(通过替代文字)