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:


Delimitadores

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


Plantilla

Salida


Plantilla

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


Plantilla

Salida


Salida

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


Plantilla

Salida


Salida

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


Plantilla

Resultado


Salida

Vemos que, dado que tenemos "age": 18, age<18 es falso. Esto provoca:

  • Rango de celdas E2:F3 que se eliminará.
  • Rango de celdas E4:F5 que 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


Plantilla

Resultado


Salida

Vemos que, dado que tenemos "age": 18, age<18 es falso. Esto provoca:

  • Rango de celdas B5:C6 que se eliminará.
  • Rango de celdas D5:E6 que 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


Plantilla

Resultado


Salida

Vemos que, dado que tenemos "age": 18, age<18 es falso. Esto provoca:

  • Rango de celdas E2:F3 que se desactivará.

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: string de dígitos, seguido de la unidad de medida. Por ejemplo, 200px. Define el ancho de la imagen.
  • Altura: string de 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 en OBJECT_STORAGE
  • objectName: ruta y nombre del archivo
  • namespace: espacio de nombres del cubo de almacenamiento de objetos
  • bucketName: nombre del cubo que contiene el archivo
  • mediaType: 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

Plantilla
Resultado

Salida

URL

  • source: se debe definir en URL
  • url: URL de imagen con formato string

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

Plantilla
Resultado

Salida

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 en URL
  • url: URL de imagen con formato string

Ejemplo: solo se especifica la altura

Datos
{
  "my_image": {
    "source": "URL",
    "url": "data:image/png;base64,iVBORw0KG...go",
    "height": "150px"
  }
}
Plantilla

Plantilla
Resultado

Salida

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:

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, UPC
  • data (necesario): String: datos que se van a codificar
  • moduleWidth: 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 2D
  • quietZone: QuietZone - El espacio vacío que rodea un código de barras
  • scale: 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_270
  • altText: 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 barra
  • fontSize: number (por defecto: 8): tamaño de fuente en puntos para texto legible por el usuario en la imagen del código de barras
  • allowedCodeSets: 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 barra
  • fontSize: number (valor por defecto: 8): tamaño de fuente para texto legible por el usuario en la imagen del código de barras
  • moduleWidthRatio: 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 3
  • isExtended: booleano (valor por defecto: false): indica si se debe utilizar el código extendido 39 para codificar el conjunto ASCII completo
  • checkDigitType: 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 especifica size, no se utilizará la unidad
  • size: 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 barra
  • fontSize: number (valor por defecto: 8): tamaño de fuente para texto legible por el usuario en la imagen del código de barras
  • eanType: 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 seleccionados
  • 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.

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, MICRO
  • eccLevel: 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_E
  • barHeight: número (valor por defecto: 40): altura de cada barra
  • fontSize: number (valor por defecto: 8): tamaño de fuente para texto legible por el usuario en la imagen del código de barras
  • guardPatternExtraHeight: número (por defecto: 5) - Altura adicional para patrones de protección
  • showCheckDigit: 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


Plantilla

Salida


Salida

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_RGB
  • value: 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_DOT
  • color: StyleColor

Ejemplo

{
  "top": {
    "borderStyle": "MEDIUM",
    "color": {
      "colorType": "OPAQUE_HEX_RGB",
      "value": "FFFF00"
    }
  }
}

Fuente

  • familyName: cadena
  • sizeInPoints: número
  • color: StyleColor
  • isItalic: booleano
  • isBold: booleano
  • isStrikethrough: booleano
  • underline: NONE, SINGLE, DOUBLE
  • textPosition: 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_COLOR
  • color: StyleColor

Ejemplo

{
  "background": {
    "backgroundType": "SINGLE_FILL_COLOR",
    "color": {
      "colorType": "OPAQUE_HEX_RGB",
      "value": "DDDDDD"
    }
  }
}

Bordes

  • top: BorderStyle
  • bottom: BorderStyle
  • left: BorderStyle
  • right: 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


Plantilla

Salida


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

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


Plantilla

Salida


Salida

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


Plantilla

Salida


Salida

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


Plantilla

Salida


Salida

Las filas 7 y 9 están ocultas porque la edad de Alice Martin y Monica Richard es menor de 18 años.

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


Plantilla

Salida


Salida

La columna D está oculta porque la edad de Mary Moss es menor de 18 años.

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:


Plantilla: Sheet1

Plantilla: Sheet2

Salida

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


Salida: Sheet1

Salida: Sheet2

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

NombreDescripciónEjemplo
==True si el operando izquierdo es igual que el operando derechoage == 18
!=True si el operando izquierdo no es igual que el operando derechoage != 18
>True si el operando izquierdo es mayor que el operando derechoage > 18
>=True si el operando izquierdo es mayor o igual que el operando derechoage >= 18
<True si el operando izquierdo es menor que el operando derechoage < 18
<=True si el operando de la derecha es menor o igual que el operando de la derechaage <= 18
&&Verdadero si la expresión izquierda y la expresión derecha son verdaderasa == 0 && c == 42
\|\|True si la expresión izquierda o la expresión derecha es truea == 0 \|\| c == 42

Lista de funciones admitidas

NombreDescripciónEjemplo
StartsWithLa referencia de datos empieza por la cadena indicadaStartsWith(movieName, "The")
StartsWithIgnoreCaseLa referencia de datos comienza con la cadena proporcionada (no sensible a mayúsculas/minúsculas)StartsWithIgnoreCase(movieName, "the")
ContainsLa referencia de datos contiene la cadena proporcionadaContains(movieName, "Matrix")
ContainsIgnoreCaseLa referencia de datos contiene la cadena proporcionada (no sensible a mayúsculas/minúsculas)ContainsIgnoreCase(movieName, "matrix")

Ejemplos

ExpresiónComentario
age >= 18
a == b \|\| c == d && e > 0c == d && e > 0 se evalúa antes que a == b
(title=="manager" \|\| title == "director") && employeeCount > 2Se pueden utilizar paréntesis
StartsWith(movieName, "The") && year == 1999Función StartsWith utilizada
Contains(movieName, "Matrix") \|\| movies.0.actor != "Pitt"Función Contains utilizada. Referencia al primer actor en la matriz movies
(numberOfTomatoes > maxTomatoes) == falseIgual 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


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.

  1. El bucle B2:D6 (géneros) se amplía verticalmente.
  2. El bucle B3:D6 (películas - Comedia) se amplía horizontalmente.
  3. El bucle B5:D5 (actores - Día de la marmota) se amplía verticalmente.
  4. El bucle E5:G5 (actores - Notting Hill) se amplía verticalmente.
  5. El bucle B9:D13 (películas - Science Fiction) se amplía horizontalmente.
  6. El bucle B11:D11 (actores - Llegada) se amplía verticalmente.
  7. El bucle E11:G11 (actores: la matriz) se amplía verticalmente.

Salida

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).

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


Plantilla