Etiquetas de MS Excel del generador de documentos
Una "etiqueta" hace referencia a una expresión que el generador de documentos puede sustituir en una plantilla de documento mediante datos JSON.
Datos
Los datos JSON se pueden almacenar en Object Storage o especificarse en línea en una solicitud.
Ejemplo - Almacenado en Object Storage
"data": {
"source": "OBJECT_STORAGE",
"namespace": "my_namespace",
"bucketName": "my_bucket",
"objectName": "my_folder/names.json"
}Ejemplo: especificado en línea en data.content
"data": {
"source": "INLINE",
"content": [{"name":"John"},{"name":"Monica"}]
}Etiquetas
Las etiquetas contienen rutas a algún valor en los datos de JSON. Por ejemplo, con estos datos:
{
"customer": {
"first_name": "Jack",
"last_name": "Smith"
}
}Puede utilizarlo en la plantilla:
Hello {customer.first_name} {customer.last_name}!Para generar este texto:
Hello Jack Smith!Tenga en cuenta que las claves JSON son sensibles a mayúsculas/minúsculas. first_name y First_Name son claves JSON diferentes.
Delimitadores de Etiqueta
Puede sustituir los delimitadores de etiqueta por defecto { y } por estos valores:
{{y}}{{{y}}}
Puede especificar los delimitadores de etiquetas en las propiedades personalizadas de la plantilla de MS Excel mediante document_generator_start_delimiter y document_generator_end_delimiter, como se muestra a continuación:

Con el ejemplo anterior, puede utilizarlo en la plantilla:
Hello {{{customer.first_name}}} {{{customer.last_name}}}!Para generar este texto:
Hello Jack Smith!Etiqueta básica
Sintaxis: {basic}
Se utiliza para inyectar textos, números o valores booleanos.
Ejemplos
Datos
{
"a_first_name": "John",
"a_last_name": "Smith",
"a_number": 42,
"a_boolean": true
}Plantilla

Salida

Documentos de ejemplo
| Plantilla de MS Excel | Datos de JSON | Salida |
|---|---|---|
| Excel-Basic.xlsx | Excel-Basic.json | Excel-Básico-output.xlsx |
Etiqueta de bucle vertical
Sintaxis: {vl:loop}...{/loop} o {#loop}...{/loop}
Una etiqueta {vl:loop} se utiliza para producir copias de un rango de celdas verticalmente. La región copiada viene determinada por la posición de las etiquetas {vl:loop} y {/loop}. Tanto {vl:loop} como {/loop} se incluyen en la región. Las celdas por debajo de la región se desplazan hacia abajo.
Consulte Etiquetas en relación con la unicidad de etiquetas de bucle.
Ejemplo
Datos
{
"customers": [
{
"name": "John Smith",
"age": 23,
"is_last_bill_paid": true
},
{
"name": "Alice Martin",
"age": 34,
"is_last_bill_paid": false
},
{
"name": "Joe West",
"age": 45,
"is_last_bill_paid": false
},
{
"name": "Mary Moss",
"age": 56,
"is_last_bill_paid": true
}
]
}Plantilla

Salida

Documentos de ejemplo
| Plantilla de MS Excel | Datos de JSON | Salida |
|---|---|---|
| Excel-VLoop.xlsx | Excel-VLoop.json | Excel-VLoop-output.xlsx |
Etiqueta de bucle horizontal
Sintaxis: {hl:loop}...{/loop} o {:loop}...{/loop}
Una etiqueta {hl:loop} se utiliza para producir copias de una región de celdas horizontalmente. La región copiada viene determinada por la posición de las etiquetas {hl:loop} y {/loop}. Tanto {hl:loop} como {/loop} se incluyen en la región. Las celdas de la derecha de la región se desplazan hacia la derecha.
Consulte Etiquetas en relación con la unicidad de etiquetas de bucle.
Ejemplo
Datos
{
"days": [
{
"day_of_week": "Monday",
"steps": 1023,
"calories": 145
},
{
"day_of_week": "Tuesday",
"steps":2345,
"calories": 267
},
{
"day_of_week": "Wednesday",
"steps": 3101,
"calories": 345
},
{
"day_of_week": "Thursday",
"steps": 4523,
"calories": 412
},
{
"day_of_week": "Friday",
"steps": 4321,
"calories": 389
}
]
}Plantilla

Salida

Documentos de ejemplo
| Plantilla de MS Excel | Datos de JSON | Salida |
|---|---|---|
| Excel-HLoop.xlsx | Excel-HLoop.json | Excel-HLoop-output.xlsx |
Etiquetas condicionales
si etiqueta
Sintaxis: {if:expression}...{/expression} o {#expression}...{/expression}
Una etiqueta {if:expression} de una hoja de trabajo muestra el rango de celdas delimitadas solo si la expresión se resuelve en true. Cuando la expresión es falsa, el rango entrelazado se elimina y el contenido que aparece a continuación es pulled up (verticalmente).
expression puede ser un valor booleano o una expresión booleana como expr(age<18). Consulte la siguiente sección sobre expresiones condicionales.
Ejemplo
Datos
{
"age": 18,
"name": "Bob"
}Plantilla

Resultado

Vemos que, dado que tenemos "age": 18, age<18 es falso. Esto provoca:
- Rango de celdas
E2:F3que se eliminará. - Rango de celdas
E4:F5que se va a extraer.
Etiqueta hif
Sintaxis: {hif:expression}...{/expression} o {:expression}...{/expression}
Una etiqueta {hif:expression} de una hoja de trabajo muestra el rango de celdas delimitadas solo si la expresión se resuelve en true. Cuando la expresión es falsa, el rango entrelazado se elimina y el contenido de la derecha es pulled left (horizontalmente).
expression puede ser un valor booleano o una expresión booleana como expr(age<18). Consulte la siguiente sección sobre expresiones condicionales.
Ejemplo
Datos
{
"age": 18,
"name": "Bob"
}Plantilla

Resultado

Vemos que, dado que tenemos "age": 18, age<18 es falso. Esto provoca:
- Rango de celdas
B5:C6que se eliminará. - Rango de celdas
D5:E6que se extraerá a la izquierda.
Etiqueta staticIf
Sintaxis: {staticIf:expression}...{/expression} o {##expression}...{/expression}
Una etiqueta {staticIf:expression} de una hoja de trabajo muestra el rango de celdas delimitadas solo si la expresión se resuelve en true. Cuando la expresión es falsa, el rango entrelazado se desbloquea sin mover el contenido circundante.
expression puede ser un valor booleano o una expresión booleana como expr(age<18). Consulte la siguiente sección sobre expresiones condicionales.
Ejemplo
Datos
{
"age": 18,
"name": "Bob"
}Plantilla

Resultado

Vemos que, dado que tenemos "age": 18, age<18 es falso. Esto provoca:
- Rango de celdas
E2:F3que se desactivará.
Documentos de ejemplo
| Plantilla de MS Excel | Datos de JSON | Salida |
|---|---|---|
| Excel-Conditionals.xlsx | Excel-Conditionals.json | Excel-Condicionales-output.xlsx |
Consulte Etiquetas en relación con la unicidad de las etiquetas condicionales.
Etiqueta de imagen
Sintaxis: {im:image}, {image:image} o {%image}
Se utiliza una etiqueta {im:image} para inyectar una imagen en un documento. Se pueden proporcionar imágenes desde un cubo de OCI Object Storage o desde una URL. Las imágenes deben proporcionarse como un objeto, por ejemplo:
{
"my_image": {
"source": "OBJECT_STORAGE",
"objectName": "image.png",
"namespace": "object_storage_namespace",
"bucketName": "my_bucket_name",
"mediaType": "image/png"
}
}Generales
A continuación se describe el esquema específico para cada tipo de origen. Además, se pueden incluir (opcionalmente) las siguientes propiedades en el objeto de imagen para controlar el formato de la imagen:
- Ancho:
stringde dígitos, seguido de la unidad de medida. Por ejemplo,200px. Define el ancho de la imagen. - Altura:
stringde dígitos, seguido de la unidad de medida. Por ejemplo,200px. Define la altura de la imagen. - alt_text: A
string. Se establecerá como el texto alternativo de la imagen.
Unidades de medida soportadas:
El generador de documentos admite las siguientes unidades de medida para imágenes:
- px (píxeles)
- en (pulgadas)
- cm (centímetros)
- % (percentage)
Tamaño por defecto de las imágenes insertadas:
- Se conserva el tamaño original.
Escalado de imágenes:
Si solo se proporciona una dimensión de imagen, el generador de documentos calculará un valor escalado para la dimensión que falta a fin de preservar la relación de aspecto. Por ejemplo:
- Si proporciona un ancho, pero no una altura, se calculará una altura escalada en función de las dimensiones nativas de la imagen y el ancho proporcionado.
- Si proporciona una altura, pero no un ancho, se calculará un ancho escalado en función de las dimensiones nativas de la imagen y la altura proporcionada.
Formatos soportados
El generador de documentos admite los siguientes formatos de imagen:
- PNG
- JPG
- GIF
- BMP
Esquemas
OCI Object Storage
source: se debe definir enOBJECT_STORAGEobjectName: ruta y nombre del archivonamespace: espacio de nombres del cubo de almacenamiento de objetosbucketName: nombre del cubo que contiene el archivomediaType: tipo de medio (MIME) de la imagen
Ejemplo - Ancho y altura especificados
Datos
{
"my_image": {
"source": "OBJECT_STORAGE",
"objectName": "image.png",
"namespace": "object_storage_namespace",
"bucketName": "my_bucket_name",
"mediaType": "image/png",
"width": "400px",
"height": "200px"
}
}Plantilla

Resultado

URL
source: se debe definir enURLurl: URL de imagen con formatostring
Nota: para utilizar imágenes de Internet, Document Generator necesita acceso saliente a Internet. Por ejemplo, si el generador de documentos se está ejecutando en una subred privada de OCI, puede configurar un gateway de NAT para permitir que el generador de documentos se conecte a Internet.
Ejemplo - Ancho y altura no especificados
Datos
{
"my_image": {
"source": "URL",
"url": "https://www.oracle.com/.../.jpg"
}
}Plantilla

Resultado

URL de datos
El generador de documentos también admite la capacidad de transferir imágenes dentro de URL de datos. La imagen debe estar codificada en Base64.
source: se debe definir enURLurl: URL de imagen con formatostring
Ejemplo: solo se especifica la altura
Datos
{
"my_image": {
"source": "URL",
"url": "data:image/png;base64,iVBORw0KG...go",
"height": "150px"
}
}Plantilla

Resultado

Documentos de ejemplo
| Plantilla de MS Excel | Datos de JSON | Salida |
|---|---|---|
| Excel-Images.xlsx | Excel-Images.json | Excel-Imágenes-output.xlsx |
Etiqueta de código de barras
Sintaxis: {bc:barcode} o {barcode:barcode}
Se utiliza una etiqueta {bc:barcode} para generar una imagen de código de barras en una hoja de trabajo. Los tipos de código de barras admitidos son:
| Código de Barras | barcodeType | Ejemplo |
|---|---|---|
| Código 128 | CODE_128 | ![]() |
| Código 39 | CODE_39 | ![]() |
| Matriz de Datos | DATA_MATRIX | ![]() |
| Número de artículo internacional (EAN) | EAN | ![]() |
| Código de respuesta rápida (código QR) | QR | ![]() |
| PDF417 | PDF417 | ![]() |
| Código universal del producto (UPC) | UPC | ![]() |
QuietZone
verticalSize: number - Tamaño de la zona tranquila vertical (por encima y por debajo del código de barras)horizontalSize: number - Tamaño de la zona silenciosa horizontal (derecha e izquierda del código de barras)
Ejemplo
{
"verticalSize": 10,
"horizontalSize": 20
}Propiedades comunes a todos los códigos de barras
barcodeType(necesario):CODE_128,CODE_39,DATA_MATRIX,EAN,QR,PDF417,UPCdata(necesario): String: datos que se van a codificarmoduleWidth: number (valor predeterminado: 1): el ancho de cada barra en el código de barras para los códigos de barras 1D. El ancho y la altura de cada punto para los códigos de barras 2DquietZone: QuietZone - El espacio vacío que rodea un código de barrasscale: number (valor predeterminado: 1.0): factor de escala para la imagen del código de barras. Todas las dimensiones se multiplicarán por este factor para generar una imagen más grande (escala > 1) o más pequeña (escala < 1)rotation:DEGREES_0(por defecto),DEGREES_90,DEGREES_180,DEGREES_270altText: String - Texto alternativo para la imagen de código de barras
Código 128: Propiedades específicas
barHeight: número (valor por defecto: 40): altura de cada barrafontSize: number (por defecto: 8): tamaño de fuente en puntos para texto legible por el usuario en la imagen del código de barrasallowedCodeSets:A,B,C,AB,ABC(por defecto)
Ejemplo
{
"barcodeType": "CODE_128",
"data": "12345",
"moduleWidth": 2,
"quietZone": {
"verticalSize": 10,
"horizontalSize": 10
},
"scale": 0.5,
"rotation": "DEGREES_90",
"altText": "Code 128",
"barHeight": 80,
"fontSize": 10,
"allowedCodeSets": "AB"
}Código 39: Propiedades específicas
barHeight: número (valor por defecto: 40): altura de cada barrafontSize: number (valor por defecto: 8): tamaño de fuente para texto legible por el usuario en la imagen del código de barrasmoduleWidthRatio: número (valor por defecto: 2): ratio entre el ancho de la barra ancha y el ancho de la barra estrecha. Los valores permitidos son 2 o 3isExtended: booleano (valor por defecto: false): indica si se debe utilizar el código extendido 39 para codificar el conjunto ASCII completocheckDigitType:NONE(por defecto),MOD_43
Ejemplo
{
"barcodeType": "CODE_39",
"data": "12345?",
"barHeight": 80,
"fontSize": 10,
"moduleWidthRatio": 3,
"isExtended": true,
"checkDigitType": "MOD_43"
}Matriz de datos - Propiedades específicas
shape:SQUARE,RECTANGULAR: si no se especifica, se utilizará la unidad más pequeña. Tenga en cuenta que si se especificasize, no se utilizará la unidadsize: número (de 1 a 30): tamaño de la matriz de datos. Si no se especifica, se selecciona el tamaño óptimo en función de los datos que se van a codificar
Ejemplo
{
"barcodeType": "DATA_MATRIX",
"data": "The quick brown fox jumped over the lazy dog.",
"shape": "SQUARE",
"size": 20
}Número de artículo internacional (EAN) - Propiedades específicas
barHeight: número (valor por defecto: 40): altura de cada barrafontSize: number (valor por defecto: 8): tamaño de fuente para texto legible por el usuario en la imagen del código de barraseanType:EAN_8,EAN_13(por defecto)
Ejemplo
{
"barcodeType": "EAN",
"data": "12345",
"barHeight": 80,
"fontSize": 10
}Código de respuesta rápida (código QR): propiedades específicas
version: número (de 1 a 40) - versión del código QR. Determina el tamaño del símbolo y la cantidad de datos que puede codificar. El valor predeterminado es la versión mínima necesaria para codificar los datos.minEccLevel:LOW,MEDIUM,QUARTILE,HIGH. Nivel mínimo de corrección de errores. El valor por defecto es el nivel máximo posible para la versión y los datos seleccionadosforceByteCompaction: booleano (valor por defecto: false): indica si se debe forzar el modo de compactación de bytes. Si es falso, se elige el modo de compactación óptimo en función de los datos que se van a codificar.
Ejemplo
{
"barcodeType": "QR",
"data": "https://docs.oracle.com/en-us/iaas/Content/Functions/Tasks/functions_pbf_catalog_document_generator.htm"
}PDF417: propiedades específicas
forceByteCompaction: booleano (valor por defecto: false): indica si se debe forzar el modo de compactación de bytes. Si es falso, se elige el modo de compactación óptimo en función de los datos que se van a codificar.rowHeight: number (valor por defecto: 3)pdf417Type:NORMAL(por defecto),TRUNCATED,MICROeccLevel: número (de 0 a 8): cantidad del código de barras que se va a dedicar a las palabras de código de corrección de errores. El número de palabras clave de corrección de errores está determinado por 2^(eccLevel + 1). Si no se especifica, se selecciona un valor en función de los datos que se van a codificar. Ignorado para códigos de barras micro PDF417
Ejemplo
{
"barcodeType": "PDF417",
"data": "12345",
"rowHeight": 6
}Universal Product Code (UPC) - Propiedades específicas
upcType:UPC_A(por defecto),UPC_EbarHeight: número (valor por defecto: 40): altura de cada barrafontSize: number (valor por defecto: 8): tamaño de fuente para texto legible por el usuario en la imagen del código de barrasguardPatternExtraHeight: número (por defecto: 5) - Altura adicional para patrones de protecciónshowCheckDigit: booleano (valor por defecto: true): indica si se debe mostrar el dígito de control en el texto legible por el usuario
Ejemplo
{
"barcodeType": "UPC",
"data": "12345"
}Ejemplo
Datos
{
"barcodeTypes": [
{
"name": "Code 39",
"barcodes": [
{
"label": "default with alt text",
"barcode": {
"barcodeType": "CODE_39",
"data": "12345",
"altText": "an example Code 39 barcode"
}
},
{
"label": "module width 2",
"barcode": {
"barcodeType": "CODE_39",
"data": "12345",
"moduleWidth": 2
}
}
]
},
{
"name": "Code 128",
"barcodes": [
{
"label": "default with alt text",
"barcode": {
"barcodeType": "CODE_128",
"data": "12345",
"altText": "an example Code 128 barcode"
}
},
{
"label": "module width 2",
"barcode": {
"barcodeType": "CODE_128",
"data": "12345",
"moduleWidth": 2
}
}
]
}
]
}Plantilla

Salida

Documentos de ejemplo
| Plantilla de MS Excel | Datos de JSON | Salida |
|---|---|---|
| Excel-Barcodes.xlsx | Excel-Barcodes.json | Excel-Códigos de barras-output.xlsx |
Etiqueta de estilo de celda
Sintaxis: {cs:style} o {cellStyling:style}
Se utiliza una etiqueta {cs:style} para agregar estilo a una celda de Excel. Las opciones de estilo incluyen:
- Fuente
- Alineación Horizontal
- Alineación Vertical
- Color de Fondo
- Bordes
Consideraciones de estilo:
- Se pueden aplicar varios estilos de celda a cada celda. Se aplicarán de izquierda a derecha
- El estilo tiene en cuenta el estilo existente de cada celda antes de aplicar un estilo adicional
- El estilo se aplicará a toda la celda
StyleColor
colorType(necesario):OPAQUE_HEX_RGBvalue: cadena hexadecimal de 6 dígitos
Ejemplo
{
"color": {
"colorType": "OPAQUE_HEX_RGB",
"value": "FFFF00"
}
}BorderStyle
borderStyle(necesario):NONE,MEDIUM,DOUBLE,DASHED,DOTTED,MEDIUM_DASHED,MEDIUM_DASH_DOT,MEDIUM_DASH_DOT_DOTcolor: StyleColor
Ejemplo
{
"top": {
"borderStyle": "MEDIUM",
"color": {
"colorType": "OPAQUE_HEX_RGB",
"value": "FFFF00"
}
}
}Fuente
familyName: cadenasizeInPoints: númerocolor: StyleColorisItalic: booleanoisBold: booleanoisStrikethrough: booleanounderline:NONE,SINGLE,DOUBLEtextPosition:BASELINE,SUPERSCRIPT,SUBSCRIPT
Ejemplo
{
"font": {
"familyName": "Cookie",
"sizeInPoints": 20,
"color": {
"colorType": "OPAQUE_HEX_RGB",
"value": "FF0000"
},
"isBold": true,
"isItalic": true,
"isStrikethrough": true,
"underline": "DOUBLE",
"textPosition": "SUPERSCRIPT"
}
}Alineación Horizontal
horizontalAlignment:LEFT,CENTER,RIGHT,JUSTIFY
Ejemplo
{
"horizontalAlignment": "RIGHT"
}Alineación Vertical
verticalAlignment:TOP,CENTER,BOTTOM
Ejemplo
{
"verticalAlignment": "TOP"
}Color de fondo de la celda
backgroundType(necesario):SINGLE_FILL_COLORcolor: StyleColor
Ejemplo
{
"background": {
"backgroundType": "SINGLE_FILL_COLOR",
"color": {
"colorType": "OPAQUE_HEX_RGB",
"value": "DDDDDD"
}
}
}Bordes
top: BorderStylebottom: BorderStyleleft: BorderStyleright: BorderStyle
Ejemplo
{
"top": {
"borderStyle": "MEDIUM",
"color": {
"colorType": "OPAQUE_HEX_RGB",
"value": "FFFF00"
}
},
"bottom": {
"borderStyle": "DASHED",
"color": {
"colorType": "OPAQUE_HEX_RGB",
"value": "FF00FF"
}
},
"left": {
"borderStyle": "DOTTED"
},
"right": {
"borderStyle": "MEDIUM_DASHED"
}
}Ejemplo
Datos
{
"cookieBold": {
"font": {
"familyName": "Cookie",
"sizeInPoints": 20,
"isBold": true
}
},
"products": [
{
"name": "Winter Gloves",
"remaining": 444,
"s1": {
"font": {
"underline": "DOUBLE"
}
},
"s2": {
"background": {
"backgroundType": "SINGLE_FILL_COLOR",
"color": {
"colorType": "OPAQUE_HEX_RGB",
"value": "DDDDDD"
}
}
}
},
{
"name": "Snow Shovel",
"remaining": 11,
"s2": {
"font": {
"color": {
"colorType": "OPAQUE_HEX_RGB",
"value": "FF0000"
}
},
"background": {
"backgroundType": "SINGLE_FILL_COLOR",
"color": {
"colorType": "OPAQUE_HEX_RGB",
"value": "BBBBBB"
}
}
}
}
]
}Plantilla

Salida

Notas
Analicemos la celda B3. La plantilla contiene {name}{cs:cookieBold}{cs:s1}
- El relleno de fondo amarillo proviene del estilo de celda original
{name}: se resuelve como "Guantes de invierno" a partir de los datos{cs:cookieBold}: la cookie de fuente es del estilo "cookieBold" definido en la raíz de los datos{cs:s1}: Double Underline es del estilo "s1" para guantes de invierno
Documentos de ejemplo
| Plantilla de MS Excel | Datos de JSON | Salida |
|---|---|---|
| Excel-CellStyling.xlsx | Excel-CellStyling.json | Excel-CellStyling-output.xlsx |
Etiqueta de fórmula
Sintaxis: {fo:formula} o {formula:formula} o {>formula}
Se utiliza una etiqueta {fo:formula} para insertar una fórmula de MS Excel en un documento.
Tenga en cuenta que el contenido de las fórmulas insertadas no está validado.
Ejemplo
Datos
{
"value1": 22,
"value2": 33,
"formula1": "A3+B3",
"formula2": "3 * 2",
"formula3": "A3 * 2",
"formula4": "SUM(A3:B3)",
"items": [
{
"itemName": "Gloves",
"quantity": 3,
"unitPrice": 22,
"total": "B11 * C11"
},
{
"itemName": "Pants",
"quantity": 2,
"unitPrice": 55,
"total": "B12 * C12"
}
]
}Plantilla

Salida

Documentos de muestra
| Plantilla de MS Excel | Datos de JSON | Salida |
|---|---|---|
| Excel-Formula.xlsx | Excel-Formula.json | Excel-Fórmula-output.xlsx |
Etiqueta de hiperenlace
Sintaxis: {hy:hyperlink}, {hyperlink:hyperlink} o {*hyperlink}
Se utiliza una etiqueta {hy:hyperlink} para insertar un hiperenlace en el que se puede hacer clic (incluidas las direcciones de correo electrónico) en un documento.
Hay 2 tipos de hipervínculos:
- Externo
- Interna
Hiperenlaces externos
Hiperenlace que hace referencia a algo fuera del documento de Excel. Se debe proporcionar como un objeto con las siguientes propiedades:
type: EXTERNOurl: una URL en formato de cadena. Ejemplo:https://www.oracle.comurl_text(opcional): cadena que se mostrará en lugar de la URL
Hiperenlaces internos
Hiperenlace que hace referencia a celdas dentro del documento de Excel. Se debe proporcionar como un objeto con las siguientes propiedades:
type: INTERNOlink: referencia de Excel en formato de cadena. Ejemplo:Sheet1!D6para hacer referencia a la celdaD6de la hoja de trabajoSheet1link_text(opcional): cadena que se mostrará en lugar del enlace.tooltip(opcional): una cadena que se mostrará como consejo de herramientas
Ejemplo
Datos
{
"external_link": {
"type": "EXTERNAL",
"url": "https://www.oracle.com",
"url_text": "Link to Oracle.com"
},
"internal_link": {
"type": "INTERNAL",
"link": "Sheet1!D6",
"link_text": "Link to cell D6"
},
"links": [
{
"name": "External link",
"link": {
"type": "EXTERNAL",
"url": "https://www.oracle.com",
"url_text": "This is an external link to oracle.com in a Loop"
}
},
{
"name": "Internal link",
"link": {
"type": "INTERNAL",
"link": "Sheet1!D6",
"link_text": "This is an internal link to cell D6 in a Loop",
"tooltip": "Hello from tooltip!"
}
}
]
}Plantilla

Salida

Documentos de muestra
| Plantilla de MS Excel | Datos de JSON | Salida |
|---|---|---|
| Excel-Hyperlinks.xlsx | Excel-Hyperlinks.json | Excel-Hipervínculos-output.xlsx |
Etiqueta de salto de página
Sintaxis: {pb:expression} o {pageBreak:expression}
Una etiqueta {pb:expression} crea un salto de página cuando la condición expression es verdadera. expression puede ser un valor booleano o una expresión booleana como expr(name=="Arrival"). Consulte la siguiente sección sobre expresiones condicionales.
Ejemplo
Datos
{
"movies": [
{
"name": "Arrival",
"actors": [
{
"name": "Amy Adams"
},
{
"name": "Jeremy Renner"
}
],
"pageBreak_condition": true
},
{
"name": "Groundhog Day",
"actors": [
{
"name": "Bill Murray"
},
{
"name": "Andie MacDowell"
}
],
"pageBreak_condition": false
},
{
"name": "Notting Hill",
"actors": [
{
"name": "Hugh Grant"
},
{
"name": "Julia Roberts"
},
{
"name": "Rhys Ifans"
}
],
"pageBreak_condition": false
}
]
}Plantilla

Salida

Documentos de muestra
| Plantilla de MS Excel | Datos de JSON | Salida |
|---|---|---|
| Excel-PageBreak.xlsx | Excel-PageBreak.json | Excel-PageBreak-output.xlsx |
Ocultar etiqueta de fila
Sintaxis: {hideRow:expression}
Una etiqueta {hideRow:expression} de una hoja de trabajo oculta o muestra la fila que contiene la etiqueta si la expresión se resuelve en true (ocultar) o false (mostrar). expression puede ser un valor booleano o una expresión booleana como expr(age<18). Consulte la siguiente sección sobre expresiones condicionales.
Tenga en cuenta que si existen varias etiquetas {hideRow:expression} en la misma fila, prevalecerá la más a la derecha, ya que el generador de documentos procesa cada fila desde la primera columna hasta la última columna.
Ejemplo
Datos
{
"hideRowTrue": true,
"customers": [
{
"name": "John Smith",
"age": 23,
"is_last_bill_paid": true
},
{
"name": "Alice Martin",
"age": 17,
"is_last_bill_paid": false
},
{
"name": "Joe West",
"age": 36,
"is_last_bill_paid": false
},
{
"name": "Monica Richard",
"age": 16,
"is_last_bill_paid": true
},
{
"name": "Mary Moss",
"age": 18,
"is_last_bill_paid": true
}
]
}Plantilla

Salida

Las filas 7 y 9 están ocultas porque la edad de Alice Martin y Monica Richard es menor de 18 años.
Documentos de muestra
| Plantilla MS Excel | Datos de JSON | Salida |
|---|---|---|
| Excel-HideRow.xlsx | Excel-HideRow.json | Excel-HideRow-output.xlsx |
Ocultar etiqueta de columna
Sintaxis: {hideColumn:expression}
Una etiqueta {hideColumn:expression} de una hoja de trabajo oculta o muestra la columna que contiene la etiqueta si la expresión se resuelve en true (ocultar) o false (mostrar). expression puede ser un valor booleano o una expresión booleana como expr(age<18). Consulte la siguiente sección sobre expresiones condicionales.
Tenga en cuenta que si existen varias etiquetas {hideColumn:expression} en la misma columna, prevalecerá la más baja, ya que el Generador de Documentos procesa cada hoja de trabajo de Excel desde la fila superior hasta la inferior.
Ejemplo
Datos
{
"hideColTrue": true,
"customers": [
{
"name": "John Smith",
"age": 23,
"is_last_bill_paid": true
},
{
"name": "Alice Martin",
"age": 18,
"is_last_bill_paid": false
},
{
"name": "Mary Moss",
"age":17,
"is_last_bill_paid": true
}
]
}Plantilla

Salida

La columna D está oculta porque la edad de Mary Moss es menor de 18 años.
Documentos de muestra
| Plantilla MS Excel | Datos de JSON | Salida |
|---|---|---|
| Excel-HideColumn.xlsx | Excel-HideColumn.json | Excel-HideColumn-output.xlsx |
Omitir etiqueta
Sintaxis: {skip}
Una etiqueta {skip} en un nombre de hoja de trabajo evitará cualquier resolución de etiqueta en esa hoja de trabajo.
Ejemplo
Datos
{
"name": "World"
}Plantilla
En este ejemplo, ambas hojas de la plantilla contienen una etiqueta:


Salida
En la salida, solo se resuelve la etiqueta de la segunda hoja de trabajo:


Documentos de muestra
| Plantilla MS Excel | Datos de JSON | Salida |
|---|---|---|
| Excel-Skip.xlsx | Excel-Skip.json | Excel-Omitir-output.xlsx |
Expresiones condicionales
Para algunas etiquetas, el generador de documentos puede utilizar expresiones que se resuelvan en true o false.
Estas expresiones combinan referencias de datos JSON, operadores (como == y <), funciones incorporadas (como StartsWith) y literales (como "John" o 23).
Reglas
- Las comparaciones de cadenas distinguen entre mayúsculas y minúsculas y utilizan la comparación de puntos de código Unicode con la normalización de NFC.
- Los operadores se evalúan de izquierda a derecha; la prioridad es: paréntesis, comparaciones,
&&y, a continuación,||. El cortocircuito se aplica a&&y||. - Los tipos son estrictos: las comparaciones numéricas requieren números; la igualdad solo compara cadena a cadena, número a número, booleano a booleano. Sin coerción cruzada.
- Las referencias a datos JSON deben estar compuestas por letras (a-z, A-Z), guiones bajos (_) o dígitos (0-9). El segundo carácter debe ser una letra o un guión bajo.
- Los datos JSON faltantes o nulos dan como resultado que la expresión se resuelva en false cuando se evalúa.
- La sintaxis de expresión no válida en la plantilla hace que el generador de documentos se detenga y devuelva un error.
Lista de operadores admitidos
| Nombre | Descripción | Ejemplo |
|---|---|---|
== | True si el operando izquierdo es igual que el operando derecho | age == 18 |
!= | True si el operando izquierdo no es igual que el operando derecho | age != 18 |
> | True si el operando izquierdo es mayor que el operando derecho | age > 18 |
>= | True si el operando izquierdo es mayor o igual que el operando derecho | age >= 18 |
< | True si el operando izquierdo es menor que el operando derecho | age < 18 |
<= | True si el operando de la derecha es menor o igual que el operando de la derecha | age <= 18 |
&& | Verdadero si la expresión izquierda y la expresión derecha son verdaderas | a == 0 && c == 42 |
\|\| | True si la expresión izquierda o la expresión derecha es true | a == 0 \|\| c == 42 |
Lista de funciones admitidas
| Nombre | Descripción | Ejemplo |
|---|---|---|
StartsWith | La referencia de datos empieza por la cadena indicada | StartsWith(movieName, "The") |
StartsWithIgnoreCase | La referencia de datos comienza con la cadena proporcionada (no sensible a mayúsculas/minúsculas) | StartsWithIgnoreCase(movieName, "the") |
Contains | La referencia de datos contiene la cadena proporcionada | Contains(movieName, "Matrix") |
ContainsIgnoreCase | La referencia de datos contiene la cadena proporcionada (no sensible a mayúsculas/minúsculas) | ContainsIgnoreCase(movieName, "matrix") |
Ejemplos
| Expresión | Comentario |
|---|---|
age >= 18 | |
a == b \|\| c == d && e > 0 | c == d && e > 0 se evalúa antes que a == b |
(title=="manager" \|\| title == "director") && employeeCount > 2 | Se pueden utilizar paréntesis |
StartsWith(movieName, "The") && year == 1999 | Función StartsWith utilizada |
Contains(movieName, "Matrix") \|\| movies.0.actor != "Pitt" | Función Contains utilizada. Referencia al primer actor en la matriz movies |
(numberOfTomatoes > maxTomatoes) == false | Igual que numberOfTomatoes <= maxTomatoes |
-1 >= -1.01 \|\| UnknownName == "Smith" | Puesto que la primera parte es verdadera, UnknownName == "Smith" no se evalúa |
Contains(drink, "Cafe\u0301") | No se admiten caracteres Unicode |
Etiquetas
Una hoja de trabajo no puede contener varios bucles o condicionales con el mismo nombre, porque en algunas situaciones es difícil saber qué etiquetas de inicio pertenecen a qué etiquetas de finalización. Utilice el modificador |label: para diferenciar los bucles que hacen referencia a la misma matriz o etiquetas condicionales que tienen la misma condición. Por ejemplo, esto no es válido:
{vl:items} ... {/items}
{vl:items} ... {/items}Pero esto es válido:
{vl:items|label:1} ... {/items|label:1}
{vl:items|label:2} ... {/items|label:2}Etiqueta - Ejemplos avanzados
Anidamiento de bucle
En este ejemplo, tenemos 3 bucles anidados. Dos bucles verticales y un bucle horizontal.
Datos
Los 3 niveles de bucles de los datos son géneros, películas y actores.
{
"genres": [
{
"name": "Comedy",
"movies": [
{
"name": "Groundhog Day",
"actors": [
{
"name": "Bill Murray",
"birth_year": 1950
},
{
"name": "Andie MacDowell",
"birth_year": 1958
}
]
},
{
"name": "Notting Hill",
"actors": [
{
"name": "Hugh Grant",
"birth_year": 1960
},
{
"name": "Julia Roberts",
"birth_year": 1967
},
{
"name": "Rhys Ifans",
"birth_year": 1967
}
]
}
]
},
{
"name": "Science Fiction",
"movies": [
{
"name": "Arrival",
"actors": [
{
"name": "Amy Adams",
"birth_year": 1974
},
{
"name": "Jeremy Renner",
"birth_year": 1971
}
]
},
{
"name": "The Matrix",
"actors": [
{
"name": "Keanu Reeves",
"birth_year": 1964
},
{
"name": "Carrie-Anne Moss",
"birth_year": 1967
},
{
"name": "Laurence Fishburne",
"birth_year": 1961
}
]
}
]
}
]
}Plantilla

Salida
Repaso de la expansión de bucles en este ejemplo
Los bucles se resuelven en cada hoja de trabajo desde la fila superior hasta la fila inferior. Cada fila se procesa de izquierda a derecha.
- El bucle B2:D6 (géneros) se amplía verticalmente.
- El bucle B3:D6 (películas - Comedia) se amplía horizontalmente.
- El bucle B5:D5 (actores - Día de la marmota) se amplía verticalmente.
- El bucle E5:G5 (actores - Notting Hill) se amplía verticalmente.
- El bucle B9:D13 (películas - Science Fiction) se amplía horizontalmente.
- El bucle B11:D11 (actores - Llegada) se amplía verticalmente.
- El bucle E11:G11 (actores: la matriz) se amplía verticalmente.

Notas
- Se puede hacer referencia a cada matriz de datos en un máximo de 1 bucle en cada hoja de trabajo.
- Todas las etiquetas de los bucles se resuelven en el contexto de su bucle. En este ejemplo, la etiqueta básica
{name}se utiliza en cada bucle con un significado diferente (nombre de género, nombre de película, nombre de actor).
| Plantilla MS Excel | Datos de JSON | Salida |
|---|---|---|
| Excel-Loops.xlsx | Excel-Loops.json | Bucles de Excel-output.xlsx |
Gráficos
En este ejemplo, se crea una plantilla que contiene 2 gráficos. Los datos de los gráficos proceden de un rango de celdas que contiene un bucle vertical. El título del gráfico hace referencia a una celda que contiene una etiqueta básica.
Datos
{
"chart_title": "Revenue/Expense",
"months": [
{
"month": "January",
"revenue": 23,
"expense": 19
},
{
"month": "February",
"revenue": 24,
"expense": 22
},
{
"month": "March",
"revenue": 25,
"expense": 18
}
]
}Plantilla








