Tags do MS Excel do Gerador de Documentos

Uma "tag" refere-se a uma expressão que o Gerador de Documentos pode substituir em um modelo de documento usando dados JSON.

Dados

Os dados JSON podem ser armazenados no Object Storage ou especificados em linha em uma Solicitação.

Exemplo - Armazenado no Serviço Object Storage

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

Exemplo - Especificado em linha em data.content

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

Tags

As tags contêm caminhos para algum valor nos dados JSON. Por exemplo, considerando esses dados:

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

Você poderia usar isso em seu modelo:

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

Para gerar este texto:

Hello Jack Smith!

Delimitadores de Tag

Você pode substituir os delimitadores de tag padrão { e } por estes valores:

  • {{ e }}
  • {{{ e }}}

Você pode especificar os delimitadores de tag nas propriedades personalizadas do modelo do MS Excel usando document_generator_start_delimiter e document_generator_end_delimiter, conforme mostrado aqui:


Delimitadores

Com o exemplo anterior, você pode usar isso em seu modelo:

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

Para gerar este texto:

Hello Jack Smith!

Tag Básica

Sintaxe: {basic}

Usado para injetar textos, números ou valores boolianos.

Exemplos

Dados

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

Modelo


Modelo

Saída


Modelo

Tag de Loop Vertical

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

Uma tag {vl:loop} é usada para produzir cópias de um intervalo de células verticalmente. A região copiada é determinada pela posição das tags {vl:loop} e {/loop}. {vl:loop} e {/loop} estão incluídos na região. As células abaixo da região são empurradas para baixo.

Exemplo

Dados

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

Modelo


Modelo

Saída


Saída

Tag de Loop Horizontal

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

Uma tag {hl:loop} é usada para produzir cópias de uma região de células horizontalmente. A região copiada é determinada pela posição das tags {hl:loop} e {/loop}. {hl:loop} e {/loop} estão incluídos na região. As células à direita da região são empurradas para a direita.

Exemplo

Dados

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

Modelo


Modelo

Saída


Saída

Tag de Imagem

Sintaxe: {im:image}, {image:image} ou {%image}

Uma tag {im:image} é usada para injetar uma imagem em um documento. É possível fornecer imagens de um Bucket do OCI Object Storage ou de um URL. As imagens devem ser fornecidas como um objeto, por exemplo:

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

Informações Gerais

O esquema específico para cada tipo de origem é descrito abaixo. Além disso, as seguintes propriedades podem ser (opcionalmente) incluídas no objeto de imagem para controlar a formatação da imagem:

  • largura: Um string de dígitos, seguido pela unidade de medida. E.G. 200px. Define a largura da imagem.
  • altura: Um string de dígitos, seguido por unidade de medida. E.G. 200px. Define a altura da imagem.
  • alt_text: Um string. Isso será definido como o texto alternativo da imagem.

Unidades de medida suportadas:

O Gerador de documentos suporta as seguintes unidades de medida para imagens:

  • px (pixels)
  • em (polegadas)
  • cm (centímetros)
  • % (porcentagem)

Tamanho padrão das imagens inseridas:

  • O tamanho original é preservado.

Dimensionamento de imagens:

Se apenas uma dimensão de imagem for fornecida, o Gerador de Documentos calculará um valor em escala para a dimensão ausente, a fim de preservar a proporção. Por exemplo:

  • Se você fornecer uma largura, mas não uma altura, uma altura dimensionada será calculada com base nas dimensões nativas da imagem e na largura fornecida.
  • Se você fornecer uma altura, mas não uma largura, uma largura dimensionada será calculada com base nas dimensões nativas da imagem e na altura fornecida.

Formatos Suportados

O Gerador de Documentos suporta os seguintes formatos de imagem:

  • PNG
  • JPG
  • GIF
  • BMP

Esquemas

OCI Object Storage

  • source: deve ser definido como OBJECT_STORAGE
  • objectName: O caminho e o nome do arquivo
  • namespace: O namespace do seu bucket de armazenamento de objetos
  • bucketName: O nome do bucket que contém o arquivo
  • mediaType: O Tipo de Mídia (MIME) da imagem

Exemplo - Largura e altura especificadas

Dados
{
  "my_image": {
    "source": "OBJECT_STORAGE",
    "objectName": "image.png",
    "namespace": "object_storage_namespace",
    "bucketName": "my_bucket_name",
    "mediaType": "image/png",
    "width": "400px",
    "height": "200px"
  }
}
Modelo

Modelo
Resultado

Saída

URL

  • source: deve ser definido como URL
  • url: o URL da imagem no formato string

Observação: para usar imagens da Internet, o Gerador de Documentos precisa de acesso de saída à Internet. Por exemplo, se o Gerador de Documentos estiver em execução em uma sub-rede privada no OCI, você poderá configurar um Gateway NAT para permitir que o Gerador de Documentos se conecte à Internet.

Exemplo - Largura e altura não especificadas

Dados
{
  "my_image": {
    "source": "URL",
    "url": "https://www.oracle.com/.../.jpg"
  }
}
Modelo

Modelo
Resultado

Saída

URL de Dados

O Gerador de Documentos também suporta a capacidade de transmitir imagens dentro de URLs de Dados. A imagem deve ser codificada em Base64.

  • source: deve ser definido como URL
  • url: o URL da imagem no formato string

Exemplo - Somente altura é especificada

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

Modelo
Resultado

Saída

Tag de Estilo da Célula

Sintaxe: {cs:style} ou {cellStyling:style}

Uma tag {cs:style} é usada para adicionar Estilo a uma célula do Excel. As opções de estilo incluem:

  • Fonte
  • Alinhamento horizontal
  • Alinhamento vertical
  • Cor de Fundo
  • Bordas

Considerações de estilo:

  • Vários Estilos de Célula podem ser aplicados a cada célula. Eles serão aplicados da esquerda para a direita
  • O estilo considera o estilo existente de cada célula antes de aplicar o estilo adicional
  • O estilo será aplicado a toda a célula

StyleColor

  • colorType (obrigatório): OPAQUE_HEX_RGB
  • valor: String hexadecimal de 6 dígitos

Exemplo

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

BorderStyle

  • borderStyle (obrigatório): NONE, MEDIUM, DOUBLE, DASHED, DOTTED, MEDIUM_DASHED, MEDIUM_DASH_DOT, MEDIUM_DASH_DOT_DOT
  • cor: StyleColor

Exemplo

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

Fonte

  • familyName: String
  • sizeInPoints: número
  • cor: StyleColor
  • isItalic: booliano
  • isBold: booliano
  • isStrikethrough: booliano
  • sublinhado: NONE, SINGLE, DOUBLE
  • textPosition: BASELINE, SUPERSCRIPT, SUBSCRIPT

Exemplo

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

Alinhamento Horizontal

  • horizontalAlignment: LEFT, CENTER, RIGHT, JUSTIFY

Exemplo

{
  "horizontalAlignment": "RIGHT"
}

Alinhamento Vert.

  • verticalAlignment: TOP, CENTER, BOTTOM

Exemplo

{
  "verticalAlignment": "TOP"
}

Cor de fundo da célula

  • backgroundType (obrigatório): SINGLE_FILL_COLOR
  • cor: StyleColor

Exemplo

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

Bordas

  • topo: BorderStyle
  • parte inferior: BorderStyle
  • esquerda: BorderStyle
  • direita: BorderStyle

Exemplo

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

Exemplo

Dados

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

Modelo


Modelo

Saída


Saída

Observações

Vamos analisar a Célula B3. O modelo contém {name}{cs:cookieBold}{cs:s1}

  • O preenchimento de Backgroud amarelo é do estilo de célula original
  • {name}: é resolvido como "Luvas de Inverno" dos Dados
  • {cs:cookieBold}: O Cookie da Fonte é do estilo "cookieBold" definido na raiz dos Dados
  • {cs:s1}: O sublinhado duplo é do estilo "s1" para luvas de inverno

Tag de quebra de página

Sintaxe: {pb:boolean} ou {pageBreak:boolean}

Uma tag {pb:boolean} cria uma Quebra de Página quando a condição boolean é verdadeira.

Exemplo

Dados

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

Modelo


Modelo

Saída


Saída

Ignorar Tag

Sintaxe: {skip}

Uma tag {skip} em um nome de Planilha impedirá qualquer resolução de tag nessa planilha.

Exemplo

Dados

{
  "a_first_name": "Fred",
  "a_last_name": "Flintstone",
  "a_number": 42,
  "a_boolean": true
}

Modelo


Modelo

Saída


Saída

Tag - Exemplos Avançados

Aninhamento de loop

Neste exemplo, temos 3 loops aninhados. Dois loops verticais e um loop horizontal.

Dados

Os 3 níveis de loops nos Dados são genres, movies e atores.

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

Modelo


Modelo

Saída

Passo a passo da expansão Loops neste exemplo

Os loops são resolvidos em cada Planilha da linha superior para a linha inferior. Cada linha é processada da esquerda para a direita.

  1. O loop B2:D6 (gêneros) é expandido verticalmente.
  2. O loop B3:D6 (filmes - Comédia) é expandido horizontalmente.
  3. O loop B5:D5 (atores - Dia da Marmota) é expandido verticalmente.
  4. O loop E5:G5 (atores - Notting Hill) é expandido verticalmente.
  5. O loop B9:D13 (filmes - Ficção Científica) é expandido horizontalmente.
  6. O loop B11:D11 (atores - Chegada) é expandido verticalmente.
  7. O loop E11:G11 (atores - A Matriz) é expandido verticalmente.

Saída

Observações

  • Cada matriz de dados pode ser referenciada em um máximo de 1 loop em cada planilha.
  • Todas as tags em loops são resolvidas no contexto do loop. Neste exemplo, a tag básica {name} é usada em cada loop com um significado diferente (nome do gênero, nome do filme, nome do ator).

Gráficos

Neste exemplo, criamos um Modelo que contém 2 gráficos. Os dados para os gráficos vêm de um intervalo de células que contém um loop vertical. O título do gráfico refere-se a uma célula que contém uma tag básica.

Dados

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

Modelo


Modelo