Sintaxis de plantillas
Las variables son marcadores dentro de tu plantilla que se sustituyen por los valores reales del registro de Lark Base.
Sintaxis básica
Sección titulada «Sintaxis básica»Usa llaves con el nombre exacto del campo:
{Field_Name}Ejemplos:
{Customer_Name}→ “Acme Corp”{Invoice_Date}→ “2024-01-15”{Total_Amount}→ “1,500.00”
Tipos de campo admitidos
Sección titulada «Tipos de campo admitidos»| Categoría | Tipos de campo | Salida por defecto |
|---|---|---|
| Texto | Texto, Email, campos de código de barras | Tal cual |
| Número | Números, Moneda, Progreso (%), Valoración | Formato de Lark (p. ej. $1,234.56) |
| Fecha/Hora | Fecha, Fecha de creación, Fecha de modificación | Formato de Lark (respeta la zona horaria) |
| Selección | Selección simple, Selección múltiple | Texto / separado por comas |
| Personas | User, Created By, Modified By, Group | Nombres visibles |
| Contacto | Teléfono, URL | Número de teléfono / URL |
| Casilla | Valores sí/no | true / false |
| Adjuntos | Archivos e imágenes | Ver imágenes dinámicas |
| Registros vinculados | Datos de tablas relacionadas | Ver registros vinculados |
| Lookup | Valores traídos de registros vinculados | Valor resuelto |
| Fórmula | Campos calculados (texto, números, fechas) | Depende del tipo de resultado |
Registros vinculados (campos anidados)
Sección titulada «Registros vinculados (campos anidados)»Accede a campos de registros vinculados con notación de punto:
{Customer.Name}{Customer.Address}{Customer.Email}El anidamiento admite hasta 5 niveles:
{Order.Customer.Company.Address.City}Propiedades avanzadas de campo (notación de punto)
Sección titulada «Propiedades avanzadas de campo (notación de punto)»Varios tipos de campo exponen subpropiedades mediante notación de punto. Sin ella, muestran un valor por defecto.
Campos URL
Sección titulada «Campos URL»{Website} → "https://example.com" (la URL){Website.text} → "Example Site" (el texto del enlace){Website.link} → "https://example.com" (la URL)User / Created By / Modified By
Sección titulada «User / Created By / Modified By»Created By y Modified By contienen una sola persona, así que la notación de punto funciona. Un campo User siempre es una lista —aunque tenga una sola persona—, por lo que {Assignee.name} no devuelve nada. Usa un índice o un bucle:
{Created_By} → "John Doe"{Created_By.name} → "John Doe"{Created_By.en_name} → "John Doe" (nombre en inglés){Created_By.id} → "ou_abc123"
{Assignee} → "John Doe, Jane Roe"{Assignee[0].name} → "John Doe"{Assignee[0].en_name} → "John Doe" (nombre en inglés){Assignee[0].id} → "ou_abc123" (ID de usuario de Lark)Para campos de varias personas, usa bucles:
{#Assignee} {name} ({en_name}){/Assignee}Campos de ubicación
Sección titulada «Campos de ubicación»{Office} → "Headquarters, 123 Main St, City"{Office.name} → "Headquarters"{Office.full_address} → "123 Main St, City, Country"{Office.address} → "123 Main St"Campos de grupo
Sección titulada «Campos de grupo»Un campo de grupo también es una lista, así que {Team.name} no devuelve nada. Usa un índice o un bucle:
{Team} → "Engineering, Design" (nombres separados por comas){Team[0].name} → primer nombre de grupo{Team[0].id} → primer ID de grupoPara todos los grupos, usa bucles:
{#Team} {name} (ID: {id}){/Team}Selección múltiple
Sección titulada «Selección múltiple»Los campos de selección múltiple se pueden recorrer con un bucle o unir con un separador propio:
{Tags} → "Red, Blue, Green" (por defecto, separado por comas){Tags | join:" / "} → "Red / Blue / Green"{#Tags} - {.}{/Tags}Campos numéricos y de fecha (los filtros anulan el formato)
Sección titulada «Campos numéricos y de fecha (los filtros anulan el formato)»Los campos numéricos y de fecha/hora se muestran con el formato propio de Lark. Al aplicar un filtro, se usa el valor bruto (el número real o la marca de tiempo) y se anula por completo el formato de Lark:
{Price} → "$1,234.50" (formato de Lark){Price | number:2} → "1,234.50" (número bruto, reformateado){Price | currency:"EUR":"de-DE"} → "1.234,50 €" (número bruto, locale alemán)
{Date} → "2026/02/26" (formato de Lark){Date | date:"DD MMM YYYY"} → "26 Feb 2026" (marca de tiempo bruta, reformateada)Los campos sin filtro conservan siempre el formato original de Lark.
Bucles (campos multi-enlace)
Sección titulada «Bucles (campos multi-enlace)»Para campos que enlazan varios registros, usa la sintaxis de bucle para repetir contenido por cada elemento:
{#Line_Items} Product: {Product_Name} Quantity: {Quantity} Price: {Price}{/Line_Items}{#Field} abre el bucle y {/Field} lo cierra. Dentro del bucle, usa los nombres de campo sin el prefijo del padre.
Etiqueta de cierre abreviada
Sección titulada «Etiqueta de cierre abreviada»Puedes usar {/} en lugar de repetir el nombre del campo:
{#Line_Items} {Product_Name} - {Price}{/}Expansión de filas de tabla
Sección titulada «Expansión de filas de tabla»Si las etiquetas de bucle van dentro de una fila de tabla, la fila entera se duplica por cada elemento: perfecto para tablas de líneas de detalle.
| Product | Qty | Price |
|---|---|---|
{#Line_Items} {Product_Name} |
{Quantity} |
{Price} {/Line_Items} |
Arrays de valores simples
Sección titulada «Arrays de valores simples»Para arrays de valores simples (no objetos), usa {.} para referenciar el elemento actual:
{#Tags} {.}{/Tags}Metadatos del bucle
Sección titulada «Metadatos del bucle»Dentro de cualquier bucle tienes disponibles estas variables especiales:
| Variable | Descripción | Ejemplo |
|---|---|---|
{$index} |
Índice actual (empieza en 0) | 0, 1, 2, … |
{$num} |
Número de fila (empieza en 1) | 1, 2, 3, … |
{$first} |
true en el primer elemento |
Imprime true / false |
{$last} |
true en el último elemento |
Imprime true / false |
Bucles anidados
Sección titulada «Bucles anidados»Los bucles se pueden anidar. Los internos pueden acceder a campos de los ámbitos externos:
{#Departments} Department: {Name} {#Employees} {Name} works in {Department.Name} {/Employees}{/Departments}Si un nombre de campo existe en el ámbito interno y en el externo, gana el interno.
Contenido condicional
Sección titulada «Contenido condicional»Muestra u oculta contenido según el valor de un campo.
Comprobación de valor
Sección titulada «Comprobación de valor»Muestra el contenido solo si el campo tiene valor:
{#if Discount} Discount applied: {Discount}{/if}Comprobación de vacío (negación)
Sección titulada «Comprobación de vacío (negación)»Muestra el contenido solo si el campo está vacío:
{#if !Notes} No additional notes.{/if}Comparación de igualdad
Sección titulada «Comparación de igualdad»{#if Status == "Approved"} This invoice has been approved.{/if}Comparación de desigualdad
Sección titulada «Comparación de desigualdad»{#if Status != "Draft"} This document has been submitted.{/if}Filtros
Sección titulada «Filtros»Los filtros transforman cómo se muestra un valor, usando la sintaxis de barra vertical (|):
{Field | filterName}{Field | filterName:"arg1":"arg2"}Los filtros se aplican después de obtener el valor y antes de insertarlo en el documento. Sin filtro, el valor se muestra con el formato por defecto de Lark.
Filtros de texto
Sección titulada «Filtros de texto»| Filtro | Descripción | Ejemplo | Salida |
|---|---|---|---|
upper |
Mayúsculas | {Name | upper} |
ACME CORP |
lower |
Minúsculas | {Name | lower} |
acme corp |
capitalize |
Inicial de cada palabra en mayúscula | {Name | capitalize} |
Acme Corp |
trim |
Elimina espacios al principio y al final | {Name | trim} |
Acme Corp |
truncate |
Recorta a una longitud (por defecto 50) | {Description | truncate:16} |
Lorem ipsum dolo... |
pad |
Rellena con un carácter (por defecto 0) |
{$num | pad:3} |
001 |
Filtros numéricos
Sección titulada «Filtros numéricos»Todos los filtros numéricos aceptan un locale opcional para dar formato por región:
| Filtro | Argumentos | Ejemplo | Salida |
|---|---|---|---|
number |
decimales, locale | {Price | number:2} |
1,234.50 |
number |
decimales, locale | {Price | number:2:"de-DE"} |
1.234,50 |
currency |
código de moneda, locale | {Price | currency:"USD"} |
$1,234.50 |
currency |
código de moneda, locale | {Price | currency:"EUR":"de-DE"} |
1.234,50 € |
currency |
código de moneda, locale | {Price | currency:"JPY":"ja-JP"} |
¥1,235 |
percent |
decimales, locale | {Rate | percent:1} |
45.6% |
percent |
decimales, locale | {Rate | percent:1:"de-DE"} |
45,6 % |
Filtro de fecha
Sección titulada «Filtro de fecha»Da formato a las fechas con patrones propios, útil cuando el formato de Lark no encaja con lo que necesitas.
Sintaxis: {Field | date:"format":"timezone":"locale"}
Todos los argumentos son opcionales. La zona horaria por defecto es UTC y el locale por defecto en-US.
| Filtro | Argumentos | Ejemplo | Salida |
|---|---|---|---|
date |
formato, zona horaria, locale | {Date | date:"DD MMM YYYY"} |
26 Feb 2026 |
date |
formato, zona horaria, locale | {Date | date:"dddd, DD MMMM YYYY"} |
Thursday, 26 February 2026 |
date |
formato, zona horaria, locale | {Date | date:"DD MMMM YYYY":"UTC":"fr-FR"} |
26 février 2026 |
date |
formato, zona horaria, locale | {Date | date:"dddd, DD MMMM YYYY":"UTC":"de-DE"} |
Donnerstag, 26 Februar 2026 |
Tokens de fecha admitidos:
| Token | Salida | Ejemplo |
|---|---|---|
YYYY |
Año de 4 dígitos | 2026 |
MMMM |
Nombre completo del mes (según locale) | February, février, Februar |
MMM |
Nombre corto del mes (según locale) | Feb, fév, Feb |
MM |
Mes de 2 dígitos | 02 |
dddd |
Nombre completo del día (según locale) | Thursday, Donnerstag, 木曜日 |
ddd |
Nombre corto del día (según locale) | Thu, Do, 木 |
DD |
Día de 2 dígitos | 26 |
HH |
Hora en formato 24 h | 15 |
mm |
Minutos | 30 |
ss |
Segundos | 00 |
Ejemplos:
{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 (zona horaria de Tokio){Invoice_Date | date:"dddd, DD MMMM YYYY":"UTC":"ja-JP"} → 木曜日, 26 2月 2026{Invoice_Date | date:"DD MMMM YYYY":"UTC":"id-ID"} → 26 Februari 2026Otros filtros
Sección titulada «Otros filtros»| Filtro | Descripción | Ejemplo | Salida |
|---|---|---|---|
join |
Une valores de un array (por defecto , ) |
{Tags | join:" / "} |
Red / Blue / Green |
default |
Valor alternativo si está vacío | {Phone | default:"N/A"} |
N/A |
Encadenar filtros
Sección titulada «Encadenar filtros»Los filtros se encadenan de izquierda a derecha con varias barras verticales:
{Name | trim | upper} → " hello " pasa a "HELLO"{$num | pad:3} → 1 pasa a "001"{Phone | default:"N/A" | upper} → null pasa a "N/A"Filtros dentro de bucles
Sección titulada «Filtros dentro de bucles»Los filtros también funcionan con las variables de bucle y la referencia al elemento actual:
{#Items} #{$num | pad:3} - {Name | upper}{/Items}
{#Tags}{. | capitalize}, {/Tags}Imágenes dinámicas
Sección titulada «Imágenes dinámicas»Sustituye imágenes de marcador por las imágenes reales de los campos de adjuntos de Lark:
- Inserta cualquier imagen en tu plantilla de Word (será el marcador).
- Haz clic derecho sobre la imagen → Editar texto alternativo.
- En la descripción del texto alternativo, escribe
{FieldName}. - Guarda la plantilla.
La imagen de marcador se sustituirá por la imagen real del campo de adjuntos, conservando el tamaño del marcador.
Varias imágenes
Sección titulada «Varias imágenes»Para campos con varios adjuntos, usa notación de índice:
{Photo} → Primera imagen (igual que {Photo[0]}){Photo[1]} → Segunda imagen{Photo[2]} → Tercera imagenRecorrer todas las imágenes
Sección titulada «Recorrer todas las imágenes»Para campos con un número variable de adjuntos, usa un bucle con {.} como texto alternativo. Cada adjunto genera su propia copia del marcador:
{#Product_Photos} [imagen con texto alternativo: {.}]{/Product_Photos}En una tabla, cada adjunto ocupa su propia fila:
| # | Photo | Filename |
|---|---|---|
{#Product_Photos} {$num} |
texto alt: {.} |
{name} {/Product_Photos} |
Propiedades disponibles dentro del bucle:
| Variable | Descripción | Ejemplo |
|---|---|---|
{name} |
Nombre del archivo | photo1.jpg |
{type} |
Tipo MIME | image/jpeg |
{size} |
Tamaño en bytes | 204800 |
Imágenes dentro de bucles de registros vinculados
Sección titulada «Imágenes dentro de bucles de registros vinculados»Los marcadores de imagen también funcionan dentro de bucles. Cada iteración resuelve la imagen de ese elemento:
{#Employees} Name: {Name} Photo: [imagen con texto alternativo: {Photo}]{/Employees}Códigos QR y de barras
Sección titulada «Códigos QR y de barras»Genera códigos QR y de barras a partir de valores de campo. Se configuran igual que las imágenes dinámicas: mediante el texto alternativo de la imagen.
Código QR
Sección titulada «Código QR»{QR:FieldName}Ejemplo: {QR:Order_ID} genera un código QR con el valor de Order_ID.
Códigos de barras
Sección titulada «Códigos de barras»| Sintaxis | Tipo | Notas |
|---|---|---|
{BARCODE:FieldName} |
Code128 | Por defecto, alfanumérico |
{BARCODE128:FieldName} |
Code128 | Code128 explícito |
{BARCODE39:FieldName} |
Code39 | Solo mayúsculas y dígitos |
{BARCODEEAN13:FieldName} |
EAN-13 | Código de producto de 13 dígitos |
{BARCODEEAN8:FieldName} |
EAN-8 | EAN corto de 8 dígitos |
{BARCODEUPCA:FieldName} |
UPC-A | Retail norteamericano de 12 dígitos |
{BARCODEUPCE:FieldName} |
UPC-E | UPC comprimido |
{BARCODEITF14:FieldName} |
ITF-14 | Códigos de envío / caja |
{BARCODEDATAMATRIX:FieldName} |
DataMatrix | 2D, alta densidad |
{BARCODEPDF417:FieldName} |
PDF417 | 2D, lineal apilado |
El prefijo no distingue mayúsculas de minúsculas: {qr:Field} y {QR:Field} funcionan igual.
Encabezados y pies de página
Sección titulada «Encabezados y pies de página»Toda la sintaxis de marcadores funciona también en encabezados y pies de página, igual que en el cuerpo.
Usos habituales:
- Nombre de la empresa o logotipo en el encabezado
- Número de documento o fecha en el pie
- Etiquetas dinámicas como
Invoice for {Customer_Name}
Para añadirlos: Insertar → Encabezado/Pie de página → Editar → escribe tu marcador, por ejemplo {Field_Name}.
Referencia rápida
Sección titulada «Referencia rápida»| Sintaxis | Descripción |
|---|---|
{Field} |
Variable simple |
{Field.Nested} |
Campo de registro vinculado (notación de punto) |
{URL.text} / {URL.link} |
Subpropiedades de URL |
{Created_By.name} / {Assignee[0].name} |
Subpropiedades de usuario |
{Location.name} / {Location.full_address} |
Subpropiedades de ubicación |
{Team[0].name} / {Team[0].id} |
Subpropiedades de grupo |
{#Field}...{/Field} |
Bucle sobre campo multivalor |
{/} |
Cierre abreviado (cierra el bucle más cercano) |
{.} |
Elemento actual del bucle (arrays simples) |
{$index} |
Índice del bucle (desde 0) |
{$num} |
Número de fila (desde 1) |
{$first} / {$last} |
Booleano primer/último elemento |
{#if Field}...{/if} |
Condición (con valor) |
{#if !Field}...{/if} |
Condición (vacío) |
{#if Field == "val"}...{/if} |
Condición (igualdad) |
{#if Field != "val"}...{/if} |
Condición (desigualdad) |
{Field | upper} |
Filtro: mayúsculas |
{Field | lower} |
Filtro: minúsculas |
{Field | capitalize} |
Filtro: iniciales en mayúscula |
{Field | trim} |
Filtro: quitar espacios |
{Field | truncate:30} |
Filtro: recortar con puntos suspensivos |
{Field | pad:3} |
Filtro: rellenar con ceros |
{Field | number:2} |
Filtro: número con decimales |
{Field | number:2:"de-DE"} |
Filtro: número según locale |
{Field | currency:"USD"} |
Filtro: formato de moneda |
{Field | currency:"EUR":"de-DE"} |
Filtro: moneda según locale |
{Field | percent:1} |
Filtro: porcentaje |
{Field | date:"DD MMM YYYY"} |
Filtro: formato de fecha propio |
{Field | date:"dddd, MMMM DD":"UTC":"fr-FR"} |
Filtro: fecha según locale |
{Field | join:" / "} |
Filtro: unir array con separador |
{Field | default:"N/A"} |
Filtro: valor alternativo |
{Field | trim | upper} |
Filtros encadenados (izquierda a derecha) |
{Photo} / {Photo[1]} |
Imagen (vía texto alternativo) |
{QR:Field} |
Código QR (vía texto alternativo) |
{BARCODE:Field} |
Código de barras (vía texto alternativo) |