Balises MS Excel du générateur de documents

Un "marqueur" fait référence à une expression que le générateur de documents peut remplacer dans un modèle de document à l'aide de données JSON.

Données

Les données JSON peuvent être stockées dans le stockage d'objets ou être insérées dans une demande.

Exemple - Stocké dans le stockage d'objets

  "data": {    
    "source": "OBJECT_STORAGE",
    "namespace": "my_namespace",
    "bucketName": "my_bucket",
    "objectName": "my_folder/names.json"
  }

Exemple - Inséré dans data.content

  "data": {
    "source": "INLINE",
    "content": [{"name":"John"},{"name":"Monica"}]
  }

Marqueurs

Les marqueurs contiennent des chemins vers une valeur dans les données JSON. Par exemple, avec ces données :

{
  "customer": {
    "first_name": "Jack",
    "last_name": "Smith"
  }
}

Vous pouvez l'utiliser dans votre modèle :

Hello {customer.first_name} {customer.last_name}!

Pour générer ce texte :

Hello Jack Smith!

Notez que les clés JSON sont sensibles à la casse. first_name et First_Name sont des clés JSON différentes.

Délimiteurs de marqueur

Vous pouvez remplacer les délimiteurs de marqueur par défaut { et } par les valeurs suivantes :

  • {{ et }}
  • {{{ et }}}

Vous pouvez spécifier les délimiteurs de marqueur dans les propriétés personnalisées du modèle MS Excel à l'aide de document_generator_start_delimiter et de document_generator_end_delimiter, comme illustré ici :


Délimiteurs

Dans l'exemple précédent, vous pouvez l'utiliser dans votre modèle :

Hello {{{customer.first_name}}} {{{customer.last_name}}}!

Pour générer ce texte :

Hello Jack Smith!

Balise de base

Syntaxe : {basic}

Utilisé pour injecter des textes, des nombres ou des valeurs booléennes.

Exemples

Données

{ 
  "a_first_name": "John",
  "a_last_name": "Smith",
  "a_number": 42,
  "a_boolean": true
}

Modèle


Modèle

Sortie


Modèle

Balise de boucle verticale

Syntaxe : {vl:loop}...{/loop} ou {#loop}...{/loop}

Un marqueur {vl:loop} est utilisé pour produire des copies d'un intervalle de cellules verticalement. La région copiée est déterminée par la position des marqueurs {vl:loop} et {/loop}. {vl:loop} et {/loop} sont inclus dans la région. Les cellules sous la région sont poussées vers le bas.

Voir Étiquettes concernant l'unicité des marqueurs de boucle.

Exemple

Données

{
  "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
    }
  ]
}

Modèle


Modèle

Sortie


Sortie

Balise de boucle horizontale

Syntaxe : {hl:loop}...{/loop} ou {:loop}...{/loop}

Un marqueur {hl:loop} est utilisé pour produire des copies d'une région de cellules horizontalement. La région copiée est déterminée par la position des marqueurs {hl:loop} et {/loop}. {hl:loop} et {/loop} sont inclus dans la région. Les cellules situées à droite de la région sont poussées à droite.

Voir Étiquettes concernant l'unicité des marqueurs de boucle.

Exemple

Données

{
  "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
    }
  ]
}

Modèle


Modèle

Sortie


Sortie

Marqueurs conditionnels

Marqueur si

Syntaxe : {if:expression}...{/expression} ou {#expression}...{/expression}

Une balise {if:expression} dans une feuille de calcul affiche l'intervalle de cellules inclus seulement si l'expression se résout à Vrai. Lorsque l'expression est fausse, l'intervalle encadré est supprimé et le contenu ci-dessous est extrait vers le haut (verticalement).

expression peut être une valeur booléenne ou une expression booléenne telle que expr(age<18). Voir la section ci-dessous sur Expressions conditionnelles.

Exemple

Données

{
  "age": 18,
  "name": "Bob"
}

Modèle


Modèle

Résultat


Sortie

Nous voyons que puisque nous avons "age": 18, age<18 est faux. Cela entraîne :

  • Intervalle de cellules E2:F3 à supprimer.
  • Intervalle de cellules E4:F5 à extraire.

Balise HIF

Syntaxe : {hif:expression}...{/expression} ou {:expression}...{/expression}

Une balise {hif:expression} dans une feuille de calcul affiche l'intervalle de cellules inclus seulement si l'expression se résout à Vrai. Lorsque l'expression est fausse, l'intervalle encadré est supprimé et le contenu à droite est extrait à gauche (horizontalement).

expression peut être une valeur booléenne ou une expression booléenne telle que expr(age<18). Voir la section ci-dessous sur Expressions conditionnelles.

Exemple

Données

{
  "age": 18,
  "name": "Bob"
}

Modèle


Modèle

Résultat


Sortie

Nous voyons que puisque nous avons "age": 18, age<18 est faux. Cela entraîne :

  • Intervalle de cellules B5:C6 à supprimer.
  • Intervalle de cellules D5:E6 à extraire vers la gauche.

Marqueur staticIf

Syntaxe : {staticIf:expression}...{/expression} ou {##expression}...{/expression}

Une balise {staticIf:expression} dans une feuille de calcul affiche l'intervalle de cellules encadré uniquement si l'expression se résout à Vrai. Lorsque l'expression est fausse, l'intervalle encadré est vide sans déplacer le contenu environnant.

expression peut être une valeur booléenne ou une expression booléenne telle que expr(age<18). Voir la section ci-dessous sur Expressions conditionnelles.

Exemple

Données

{
  "age": 18,
  "name": "Bob"
}

Modèle


Modèle

Résultat


Sortie

Nous voyons que puisque nous avons "age": 18, age<18 est faux. Cela entraîne :

  • L'intervalle de cellules E2:F3 doit être vide.

Marqueur d'image

Syntaxe : {im:image} ou {image:image} ou {%image}

Une balise {im:image} est utilisée pour insérer une image dans une feuille de calcul. Les images peuvent être fournies à partir d'un seau de stockage d'objets OCI ou d'une URL. Les images doivent être fournies en tant qu'objet, par exemple :

{
  "my_image": {
    "source": "OBJECT_STORAGE",
    "objectName": "image.png",
    "namespace": "object_storage_namespace",
    "bucketName": "my_bucket_name",
    "mediaType": "image/png"
  }
}

Données générales

Le schéma spécifique pour chaque type de source est décrit ci-dessous. Vous pouvez également inclure les propriétés facultatives suivantes dans l'objet image pour contrôler le formatage de l'image :

  • width : string de chiffres, suivi de l'unité de mesure. E.G. 200px. Définit la largeur de l'image.
  • Hauteur : string de chiffres, suivi de l'unité de mesure. E.G. 200px. Définit la hauteur de l'image.
  • alt_text : Une valeur string. Cela sera défini comme texte alternatif de l'image.

Unités de mesure prises en charge :

Le générateur de documents prend en charge les unités de mesure suivantes pour les images :

  • px (pixels)
  • po
  • cm (centimètres)
  • % (pourcentage)

Taille par défaut des images insérées :

  • La taille originale est conservée.

Mise à l'échelle de l'image :

Si une seule dimension d'image est fournie, Document Generator calcule une valeur mise à l'échelle pour la dimension manquante afin de préserver le rapport hauteur/largeur. Par exemple :

  • Si vous fournissez une largeur, mais pas de hauteur, une hauteur ajustée sera calculée en fonction des dimensions natives de l'image et de la largeur fournie.
  • Si vous fournissez une hauteur, mais pas de largeur, une largeur ajustée sera calculée en fonction des dimensions natives de l'image et de la hauteur fournie.

Formats pris en charge

Le générateur de documents prend en charge les formats d'image suivants :

  • PNG
  • JPG
  • GIF
  • BMP

Schémas

Service de stockage d'objets OCI

  • source : doit être réglé à OBJECT_STORAGE
  • objectName : Chemin et nom du fichier
  • namespace : Espace de noms du seau de stockage d'objets
  • bucketName : Nom du seau qui contient le fichier
  • mediaType : Type de média (MIME) de l'image

Exemple - Largeur et hauteur spécifiées

Données
{
  "my_image": {
    "source": "OBJECT_STORAGE",
    "objectName": "image.png",
    "namespace": "object_storage_namespace",
    "bucketName": "my_bucket_name",
    "mediaType": "image/png",
    "width": "400px",
    "height": "200px"
  }
}
Modèle

Modèle
résultat

Sortie

URL

  • source : doit être réglé à URL
  • url : URL de l'image au format string

Remarque : Pour utiliser des images provenant d'Internet, le générateur de documents a besoin d'un accès sortant à Internet. Par exemple, si le générateur de documents s'exécute dans un sous-réseau privé dans OCI, vous pouvez configurer une passerelle NAT pour permettre au générateur de documents de se connecter à Internet.

Exemple - Largeur et hauteur non spécifiées

Données
{
  "my_image": {
    "source": "URL",
    "url": "https://www.oracle.com/.../.jpg"
  }
}
Modèle

Modèle
résultat

Sortie

URL des données

Le générateur de documents prend également en charge les images fournies sous forme d'URL de données. L'image doit être encodée en Base64.

  • source : doit être réglé à URL
  • url : URL de l'image au format string

Exemple - Seule la hauteur est spécifiée

Données
{
  "my_image": {
    "source": "URL",
    "url": "data:image/png;base64,iVBORw0KG...go",
    "height": "150px"
  }
}
Modèle

Modèle
résultat

Sortie

Balise de code à barres

Syntaxe : {bc:barcode} ou {barcode:barcode}

Un marqueur {bc:barcode} est utilisé pour générer une image de code à barres dans une feuille de calcul. Les types de codes à barres pris en charge sont les suivants :

QuietZone

  • verticalSize : nombre - Taille de la zone silencieuse verticale (au-dessus et en dessous du code à barres)
  • horizontalSize : nombre - Taille de la zone silencieuse horizontale (à droite et à gauche du code à barres)

Exemple

{
  "verticalSize": 10,
  "horizontalSize": 20
}

Propriétés communes à tous les codes à barres

  • barcodeType (obligatoire) : CODE_128, CODE_39, DATA_MATRIX, EAN, QR, PDF417, UPC
  • data (obligatoire) : Chaîne - Données à encoder
  • moduleWidth : nombre (par défaut : 1) - Largeur de chaque barre du code à barres pour les codes à barres 1D. Largeur et hauteur de chaque point pour les codes à barres 2D
  • quietZone : QuietZone - Espace vide entourant un code à barres
  • scale : nombre (par défaut : 1.0) - Facteur d'échelle pour l'image de code à barres. Toutes les dimensions seront multipliées par ce facteur pour générer une image plus grande (échelle > 1) ou plus petite (échelle < 1)
  • rotation : DEGREES_0 (par défaut), DEGREES_90, DEGREES_180, DEGREES_270
  • altText : Chaîne - Texte de remplacement pour l'image de code à barres

Code 128 - Propriétés spécifiques

  • barHeight : nombre (valeur par défaut : 40) - Hauteur de chaque barre
  • fontSize : nombre (par défaut : 8) - Taille de police en points pour le texte lisible par l'homme dans l'image de code à barres
  • allowedCodeSets : A, B, C, AB, ABC(par défaut)

Exemple

{
  "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"
}

Code 39 - Propriétés spécifiques

  • barHeight : nombre (valeur par défaut : 40) - Hauteur de chaque barre
  • fontSize : nombre (par défaut : 8) - Taille de police pour le texte lisible par l'homme dans l'image de code à barres
  • moduleWidthRatio : nombre (valeur par défaut : 2) - Ratio de largeur de barre large à largeur de barre étroite. Les valeurs autorisées sont 2 ou 3
  • isExtended : booléen (valeur par défaut : false) - Indique si le code étendu 39 doit être utilisé pour encoder le jeu ASCII complet
  • checkDigitType : NONE (par défaut), MOD_43

Exemple

{
  "barcodeType": "CODE_39",
  "data": "12345?",
  "barHeight": 80,
  "fontSize": 10,
  "moduleWidthRatio": 3,
  "isExtended": true,
  "checkDigitType": "MOD_43"
}

Matrice de données - Propriétés spécifiques

  • shape : SQUARE, RECTANGULAR - Si elle n'est pas spécifiée, la forme la plus petite sera utilisée. Notez que si size est spécifié, la forme ne sera pas utilisée
  • size : Nombre (de 1 à 30) - Taille de la matrice de données. Si elle n'est pas spécifiée, la taille optimale est choisie en fonction des données à encoder

Exemple

{
  "barcodeType": "DATA_MATRIX",
  "data": "The quick brown fox jumped over the lazy dog.",
  "shape": "SQUARE",
  "size": 20
}

Numéro d'article international (EAN) - Propriétés spécifiques

  • barHeight : nombre (valeur par défaut : 40) - Hauteur de chaque barre
  • fontSize : nombre (par défaut : 8) - Taille de police pour le texte lisible par l'homme dans l'image de code à barres
  • eanType : EAN_8, EAN_13 (par défaut)

Exemple

{
  "barcodeType": "EAN",
  "data": "12345",
  "barHeight": 80,
  "fontSize": 10
}

Code de réponse rapide (code QR) - Propriétés spécifiques

  • version : nombre (de 1 à 40) - Version du code QR. Détermine la taille du symbole et la quantité de données qu'il peut encoder. La valeur par défaut est la version minimale nécessaire pour encoder les données.
  • minEccLevel: LOW, MEDIUM, QUARTILE, HIGH. Niveau minimal de correction des erreurs. La valeur par défaut est le niveau maximal possible pour la version et les données sélectionnées
  • forceByteCompaction : booléen (valeur par défaut : false) - Indique s'il faut forcer le mode de compactage par octets. Si Faux, le mode de compactage optimal est choisi en fonction des données à coder

Exemple

{
  "barcodeType": "QR",
  "data": "https://docs.oracle.com/en-us/iaas/Content/Functions/Tasks/functions_pbf_catalog_document_generator.htm"
}

PDF417 - Propriétés spécifiques

  • forceByteCompaction : booléen (valeur par défaut : false) - Indique s'il faut forcer le mode de compactage par octets. Si Faux, le mode de compactage optimal est choisi en fonction des données à coder
  • rowHeight : nombre (valeur par défaut : 3)
  • pdf417Type : NORMAL (par défaut), TRUNCATED, MICRO
  • eccLevel : nombre (de 0 à 8) - Quantité du code à barres à dédier aux mots de code de correction d'erreur. Le nombre de mots de code de correction d'erreur est déterminé par 2^(eccLevel + 1). Si elle n'est pas spécifiée, une valeur est choisie en fonction des données à encoder. Ignoré pour les micro-codes à barres PDF417

Exemple

{
  "barcodeType": "PDF417",
  "data": "12345",
  "rowHeight": 6
}

Universal Product Code (UPC) - Propriétés spécifiques

  • upcType : UPC_A (par défaut), UPC_E
  • barHeight : nombre (valeur par défaut : 40) - Hauteur de chaque barre
  • fontSize : nombre (par défaut : 8) - Taille de police pour le texte lisible par l'homme dans l'image de code à barres
  • guardPatternExtraHeight : nombre (valeur par défaut : 5) - Hauteur supplémentaire pour les modèles de garde
  • showCheckDigit : booléen (valeur par défaut : true) - Indique si le chiffre de contrôle doit être affiché dans le texte lisible par l'homme

Exemple

{
  "barcodeType": "UPC",
  "data": "12345"
}

Exemple

Données

{
  "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
          }
        }
      ]
    }
  ]
}

Modèle


Modèle

Sortie


Sortie

Étiquette de style de cellule

Syntaxe : {cs:style} ou {cellStyling:style}

Une balise {cs:style} est utilisée pour appliquer un style à une cellule Excel. Les options de style comprennent :

  • Police
  • Alignement horizontal
  • Alignement vertical
  • Background color
  • Frontières

Considérations relatives au style :

  • Plusieurs étiquettes de style de cellule peuvent être appliquées à une cellule. Ils sont appliqués de gauche à droite.
  • Le style de cellule existant est conservé avant l'application d'un style supplémentaire.
  • Le style sera appliqué à toute la cellule

StyleColor

  • colorType (obligatoire) : OPAQUE_HEX_RGB
  • value : Chaîne hexadécimale à 6 chiffres

Exemple

{
  "color": {
    "colorType": "OPAQUE_HEX_RGB",
    "value": "FFFF00"
  }
}

Style de bordure

  • borderStyle (obligatoire) : NONE, MEDIUM, DOUBLE, DASHED, DOTTED, MEDIUM_DASHED, MEDIUM_DASH_DOT, MEDIUM_DASH_DOT_DOT
  • color: StyleColor

Exemple

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

Police

  • familyName : Chaîne
  • sizeInPoints : Nombre
  • color: StyleColor
  • isItalic : booléen
  • isBold : booléen
  • isStrikethrough : booléen
  • underline: NONE, SINGLE, DOUBLE
  • textPosition: BASELINE, SUPERSCRIPT, SUBSCRIPT

Exemple

{
  "font": {
    "familyName": "Cookie",
    "sizeInPoints": 20,
    "color": {
      "colorType": "OPAQUE_HEX_RGB",
      "value": "FF0000"
    },
    "isBold": true,
    "isItalic": true,
    "isStrikethrough": true,
    "underline": "DOUBLE",
    "textPosition": "SUPERSCRIPT"
  }
}

Alignement horizontal

  • horizontalAlignment: LEFT, CENTER, RIGHT, JUSTIFY

Exemple

{
  "horizontalAlignment": "RIGHT"
}

Alignement vertical

  • verticalAlignment: TOP, CENTER, BOTTOM

Exemple

{
  "verticalAlignment": "TOP"
}

Couleur d'arrière-plan de la cellule

  • backgroundType (obligatoire) : SINGLE_FILL_COLOR
  • color: StyleColor

Exemple

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

Frontières

  • top: BorderStyle
  • bottom: BorderStyle
  • left: BorderStyle
  • right: BorderStyle

Exemple

{
  "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"
  }
}

Exemple

Données

{
  "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"
          }
        }
      }
    }
  ]
}

Modèle


Modèle

Sortie


Sortie

Notes

Considérez la cellule B3. Le modèle contient {name}{cs:cookieBold}{cs:s1}.

  • Le fond jaune provient du style de la cellule d'origine.
  • {name} se résout en "Gants d'hiver" à partir des données.
  • {cs:cookieBold} applique la police de témoin du style cookieBold défini à la racine des données.
  • {cs:s1} applique le double soulignement du style s1 pour les gants d'hiver.

Marqueur de formule

Syntaxe : {fo:formula} ou {formula:formula} ou {>formula}

Une balise {fo:formula} est utilisée pour insérer une formule Excel dans une feuille de calcul.

Notez que le contenu des formules insérées n'est pas validé.

Exemple

Données

{
  "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"
    }
  ]
}

Modèle


Modèle

Sortie


Sortie

Balise de saut de page

Syntaxe : {pb:expression} ou {pageBreak:expression}

Une balise {pb:expression} insère un saut de page lorsque la condition expression est vraie. expression peut être une valeur booléenne ou une expression booléenne telle que expr(name=="Arrival"). Voir la section ci-dessous sur les expressions conditionnelles.

Exemple

Données

{
  "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
    }
  ]
}

Modèle


Modèle

Sortie


Sortie

Masquer la balise de rangée

Syntaxe : {hideRow:expression}

Une balise {hideRow:expression} dans une feuille de calcul masque ou affiche la rangée qui contient la balise si l'expression se résout en Vrai (masquer) ou Faux (afficher). expression peut être une valeur booléenne ou une expression booléenne telle que expr(age<18). Voir la section ci-dessous sur Expressions conditionnelles.

Notez que si plusieurs balises {hideRow:expression} existent dans la même rangée, la plus à droite prévaudra, car le générateur de document traite chaque rangée de la première colonne à la dernière colonne.

Exemple

Données

{
  "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
    }
  ]
}

Modèle


Modèle

Sortie


Sortie

Les lignes 7 et 9 sont cachées parce que l'âge d'Alice Martin et de Monica Richard est inférieur à 18 ans.

Masquer la balise de colonne

Syntaxe : {hideColumn:expression}

Une balise {hideColumn:expression} dans une feuille de calcul masque ou affiche la colonne qui contient la balise si l'expression se résout en Vrai (masquer) ou Faux (afficher). expression peut être une valeur booléenne ou une expression booléenne telle que expr(age<18). Voir la section ci-dessous sur Expressions conditionnelles.

Notez que si plusieurs balises {hideColumn:expression} existent dans la même colonne, la balise inférieure prévaudra, car le générateur de documents traite chaque feuille de calcul Excel de la rangée supérieure à la rangée inférieure.

Exemple

Données

{
  "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
    }
  ]
}

Modèle


Modèle

Sortie


Sortie

La colonne D est masquée car l'âge de Mary Moss est inférieur à 18 ans.

Ignorer l'étiquette

Syntaxe : {skip}

Une balise {skip} dans un nom de feuille de calcul empêchera toute résolution de balise dans cette feuille de calcul.

Exemple

Données

{
  "name": "World"
}

Modèle

Dans cet exemple, les deux feuilles du modèle contiennent une balise :


Modèle - Sheet1

Modèle - Sheet2

Sortie

Dans la sortie, seule la balise de la deuxième feuille de calcul est résolue :


Sortie - Sheet1

Sortie - Sheet2

Marqueur de génération de feuille

Syntaxe : {!dataRef} ou {sg:dataRef}

Un marqueur de génération de feuille agit comme une boucle ou un marqueur conditionnel sur l'ensemble de la feuille de calcul. Une seule feuille de calcul est autorisée.

  • Si les données JSON sous-jacentes à dataRef sont un tableau, la feuille de calcul est dupliquée pour chaque élément de tableau supplémentaire. Les marqueurs de chaque feuille de calcul sont évalués dans le contexte de l'élément de tableau correspondant, comme un marqueur de boucle.
  • Si les données JSON sous-jacentes sont la valeur booléenne true, la feuille de calcul initiale est traitée normalement.
  • Sinon, la feuille de calcul est supprimée.

Exemple

Données

{
  "region": "Midwest",
  "customers": [
    {
      "name": "Alice"
    },
    {
      "name": "Bob"
    }
  ]
}

Modèle

La feuille de calcul contient une balise de génération de feuille, {!customers}, qui fait référence au tableau customers dans les données JSON. Il contient également deux balises de base dans la grille de la feuille de calcul et une autre dans le nom de la feuille de calcul.


Modèle - Feuille 1

Sortie

Dans la sortie :

  • Il y a une feuille de calcul par client.
  • La balise de base {name} est remplacée par le nom du client courant du tableau JSON, y compris dans le nom de la feuille de calcul.
  • Le marqueur de base {region} est remplacé par la région spécifiée au niveau racine des données JSON.

Sortie - Feuille 1

Sortie - Feuille 1

Notes

  • La balise de génération de feuille peut apparaître n'importe où dans la feuille de calcul.
  • Les feuilles de calcul générées seront insérées immédiatement après la feuille de calcul initiale.
  • Si le nom d'une feuille de calcul générée n'est pas unique, un nombre est ajouté à son nom. Donc, si la feuille de calcul d'origine est appelée "Client", elle générera "Client", "Client 2", "Client 3", etc.
  • Si la feuille de calcul est supprimée et qu'il n'y a pas d'autres feuilles de calcul, une feuille de calcul vide appelée "Feuille1" est créée afin que le fichier de sortie soit toujours valide.

Expression conditionnelle

Pour certaines balises, le générateur de documents peut utiliser des expressions dont la résolution est Vrai ou Faux.

Ces expressions combinent des références de données JSON, des opérateurs (comme == et <), des fonctions intégrées (comme StartsWith) et des littéraux (comme "John" ou 23).

Règles

  • Les comparaisons de chaînes sont sensibles à la casse et utilisent la comparaison de points de code Unicode avec la normalisation NFC.
  • Les opérateurs sont évalués de gauche à droite; la priorité est : parenthèses, comparaisons, &&, puis ||. Le court-circuit s'applique aux && et ||.
  • Les types sont stricts : les comparaisons numériques nécessitent des nombres; l'égalité compare uniquement chaîne à chaîne, nombre à numéro, booléen à booléen. Pas de coercition de type croisé.
  • Les références de données JSON doivent être composées de lettres (a-z, A-Z), de traits de soulignement (_) ou de chiffres (0-9). Le premier caractère doit être une lettre ou un trait de soulignement.
  • Des données JSON manquantes ou nulles entraînent la résolution de l'expression à Faux lors de l'évaluation.
  • La syntaxe d'expression non valide dans le modèle entraîne l'arrêt du générateur de documents et le retour d'une erreur.

Liste des opérateurs pris en charge

NomDescriptionExemple
==True si l'opérande de gauche est égal à l'opérande de droiteage == 18
!=True si l'opérande de gauche n'est pas égal à l'opérande de droiteage != 18
>True si l'opérande de gauche est supérieur à l'opérande de droiteage > 18
>=True si l'opérande gauche est supérieur ou égal à l'opérande droitage >= 18
<True si l'opérande de gauche est inférieur à l'opérande de droiteage < 18
<=True si l'opérande gauche est inférieur ou égal à l'opérande droitage <= 18
&&Vrai si l'expression de gauche et si l'expression de droite est vraiea == 0 && c == 42
||Vrai si l'expression de gauche ou si l'expression de droite est vraiea == 0 || c == 42

Liste des fonctions prises en charge

NomDescriptionExemple
StartsWithLa référence de données commence par la chaîne indiquéeStartsWith(movieName, "The")
StartsWithIgnoreCaseLa référence de données commence par la chaîne indiquée (non sensible à la casse)StartsWithIgnoreCase(movieName, "the")
ContainsLa référence de données contient la chaîne indiquéeContains(movieName, "Matrix")
ContainsIgnoreCaseLa référence de données contient la chaîne indiquée (non sensible à la casse)ContainsIgnoreCase(movieName, "matrix")

Exemples

Expression Commentaire
age >= 18
a == b || c == d && e > 0c == d && e > 0 est évalué avant a == b
(title=="manager" || title == "director") && employeeCount > 2Les parenthèses peuvent être utilisées
StartsWith(movieName, "The") && year == 1999Fonction StartsWith utilisée
Contains(movieName, "Matrix") || movies.0.actor != "Pitt"Fonction Contains utilisée. Référence au premier acteur dans un tableau movies
(numberOfTomatoes > maxTomatoes) == falseIdentique à numberOfTomatoes <= maxTomatoes
-1 >= -1.01 || UnknownName == "Smith"Comme la première partie est vraie, UnknownName == "Smith" n'est pas évalué
Contains(drink, "Cafe\u0301")Les caractères Unicode sont pris en charge

Étiquettes

Une feuille de calcul ne peut pas contenir plusieurs boucles ou conditionnels portant le même nom, car dans certaines situations, il est difficile de savoir avec quelles balises de début appartiennent les balises de fin. Utilisez le modificateur |label: pour différencier les boucles qui référencent le même tableau ou les mêmes marqueurs conditionnels qui ont la même condition. Par exemple, ceci n'est pas valide :

{vl:items} ... {/items}
{vl:items} ... {/items}

Mais ceci est valable :

{vl:items|label:1} ... {/items|label:1}
{vl:items|label:2} ... {/items|label:2}

Balise - Exemples avancés

Nidification de boucle

Cet exemple contient trois boucles imbriquées : deux boucles verticales et une boucle horizontale.

Données

Les trois niveaux de boucle des données sont des genres, des films et des acteurs.

{
  "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
            }
          ]
        }
      ]
    }
  ]
}

Modèle


Modèle

Sortie

Présentation de l'expansion des boucles dans cet exemple

Les boucles sont résolues dans chaque feuille de calcul, de la rangée supérieure à la rangée inférieure. Chaque rangée est traitée de gauche à droite.

  1. La boucle B2 :D6 (genres) est développée verticalement.
  2. La boucle B3 :D6 (films - Comédie) est développée horizontalement.
  3. La boucle B5 :D5 (acteurs - Groundhog Day) est développée verticalement.
  4. La boucle E5 :G5 (acteurs - Notting Hill) est développée verticalement.
  5. La boucle B9 :D13 (films - Science Fiction) est développée horizontalement.
  6. La boucle B11 :D11 (acteurs - Arrivée) est développée verticalement.
  7. La boucle E11 :G11 (acteurs - La matrice) est développée verticalement.

Sortie

Notes

  • Toutes les balises des boucles sont résolues dans le contexte de leur boucle. Dans cet exemple, la balise de base {name} est utilisée dans chaque boucle avec une signification différente (nom du genre, nom du film, nom de l'acteur).

Graphiques

Cet exemple utilise un modèle qui contient deux graphiques. Les données du graphique proviennent d'une plage de cellules contenant une boucle verticale. Le titre du graphique fait référence à une cellule qui contient une balise de base.

Données

{
  "chart_title": "Revenue/Expense",
  "months": [
    {
      "month": "January",
      "revenue": 23,
      "expense": 19
    },
    {
      "month": "February",
      "revenue": 24,
      "expense": 22
    },
    {
      "month": "March",
      "revenue": 25,
      "expense": 18
    }
  ]
}

Modèle


Modèle