Tabelas dinâmicas

A API Google Sheets permite que você crie e atualize tabelas dinâmicas dentro de planilhas. Os exemplos nesta página ilustram como realizar algumas operações comuns de tabela dinâmica com a API Sheets.

Esses exemplos são apresentados na forma de solicitações HTTP para serem de linguagem neutra. Para saber como implementar uma atualização em lote em diferentes idiomas usando as bibliotecas de cliente da API do Google, consulte Atualizar planilhas.

Nesses exemplos, os marcadores de posição SPREADSHEET_ID e SHEET_ID indicam onde você forneceria esses IDs. O ID da planilha pode ser encontrado no URL dela. É possível conseguir o ID da planilha usando o método spreadsheets.get. Os intervalos são especificados usando a notação A1. Um exemplo de intervalo é Sheet1!A1:D5.

Além disso, o marcador SOURCE_SHEET_ID indica sua página com os dados de origem. Nesses exemplos, esta é a tabela listada em Dados de origem da tabela dinâmica.

Dados de origem da tabela dinâmica

Para esses exemplos, suponha que a planilha usada tenha os seguintes dados de origem de "vendas" na primeira planilha ("Sheet1"). As strings na primeira linha são rótulos para as colunas individuais. Para ver exemplos de como ler outras páginas na planilha, consulte Notação A1.

R B C D E F G
1 Categoria do item Número do modelo Custo Quantidade Região Vendedor Data de envio
2 Roda gigante W-24 US$ 20,50 4 Oeste Bete 01/03/2016
3 Porta D-01X US$ 15,00 2 Sul Amir 15/03/2016
4 Mecanismo ENG-0134 R$ 100,00 1 Norte Carmen 20/03/2016
5 Quadro FR-0B1 US$ 34,00 8 Leste Hannah 12/03/2016
6 Painel P-034 US$ 6,00 4 Norte Devan 02/04/2016
7 Painel P-052 US$ 11,50 7 Leste Erik 16/05/2016
8 Roda gigante W-24 US$ 20,50 11 Sul Sheldon 30/04/2016
9 Mecanismo ENG-0161 US$ 330,00 2 Norte Jéssica 02/07/2016
10 Porta D-01Y US$ 29,00 6 Oeste Armando 13/03/2016
11 Quadro FR-0B1 US$ 34,00 9 Sul Yuliana 27/02/2016
12 Painel P-102 US$ 3,00 15 Oeste Carmen 18/04/2016
13 Painel P-105 US$ 8,25 13 Oeste Jéssica 20/06/2016
14 Mecanismo ENG-0211 US$ 283,00 1 Norte Amir 21/06/2016
15 Porta D-01X US$ 15,00 2 Oeste Armando 03/07/2016
16 Quadro FR-0B1 US$ 34,00 6 Sul Carmen 15/07/2016
17 Roda gigante W-25 US$ 20,00 8 Sul Hannah 02/05/2016
18 Roda gigante W-11 US$ 29,00 13 Leste Erik 19/05/2016
19 Porta D-05 US$ 17,70 7 Oeste Bete 28/06/2016
20 Quadro FR-0B1 US$ 34,00 8 Norte Sheldon 30/03/2016

Adicionar uma tabela dinâmica

O exemplo de código spreadsheets.batchUpdate a seguir mostra como usar o UpdateCellsRequest para criar uma tabela dinâmica a partir dos dados de origem, ancorando-a na célula A50 da página especificada por SHEET_ID.

A solicitação configura a tabela dinâmica com as seguintes propriedades:

  • um grupo de valores (Quantity) que indica o número de vendas. Como há apenas um grupo de valores, as duas configurações possíveis de valueLayout são equivalentes.
  • Dois grupos de linhas (Item Category e Model Number). O primeiro é classificado em valor crescente da Quantidade total da Região "Oeste". Portanto, "Engine" (sem vendas na região oeste) aparece acima de "Door" (com 15 vendas na região West). O grupo Número do modelo classifica em ordem decrescente do total de vendas em todas as regiões, de modo que "W-24" (15 vendas) aparece acima de "W-25" (8 vendas). Isso é feito definindo o campo valueBucket como {}.
  • Um grupo de colunas (Região) que é classificado em ordem crescente com o maior número de vendas. Novamente, valueBucket é definido como {}. "Norte" tem o menor total de vendas e, portanto, aparece como a primeira coluna Região.

Confira o protocolo da solicitação abaixo.

POST https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID:batchUpdate
{
  "requests": [
    {
      "updateCells": {
          "rows": [
              {
            "values": [
              {
                "pivotTable": {
                  "source": {
                    "sheetId": SOURCE_SHEET_ID,
                    "startRowIndex": 0,
                    "startColumnIndex": 0,
                    "endRowIndex": 20,
                    "endColumnIndex": 7
                  },
                  "rows": [
                    {
                      "sourceColumnOffset": 0,
                      "showTotals": true,
                      "sortOrder": "ASCENDING",
                      "valueBucket": {
                        "buckets": [
                          {
                            "stringValue": "West"
                          }
                        ]
                      }
                    },
                    {
                      "sourceColumnOffset": 1,
                      "showTotals": true,
                      "sortOrder": "DESCENDING",
                      "valueBucket": {}
                    }
                  ],
                  "columns": [
                    {
                      "sourceColumnOffset": 4,
                      "sortOrder": "ASCENDING",
                      "showTotals": true,
                      "valueBucket": {}
                    }
                  ],
                  "values": [
                    {
                      "summarizeFunction": "SUM",
                      "sourceColumnOffset": 3
                    }
                  ],
                  "valueLayout": "HORIZONTAL"
                }
              }
            ]
          }
        ],
        "start": {
          "sheetId": SHEET_ID,
          "rowIndex": 49,
          "columnIndex": 0
        },
        "fields": "pivotTable"
      }
    }
  ]
}

A solicitação cria uma tabela dinâmica como esta:

Resultado do roteiro "Adicionar tabela dinâmica"

Adicionar uma tabela dinâmica com valores calculados

O exemplo de código spreadsheets.batchUpdate abaixo mostra como usar a UpdateCellsRequest para criar uma tabela dinâmica com um grupo de valores calculados dos dados de origem, ancorando-o na célula A50 da página especificada por SHEET_ID.

A solicitação configura a tabela dinâmica com as seguintes propriedades:

  • Dois grupos de valores (Quantity e Total Price). O primeiro indica o número de vendas. O segundo é um valor calculado com base no produto do custo de uma peça e seu número total de vendas, usando esta fórmula: =Cost*SUM(Quantity).
  • Três grupos de linhas (Item Category, Model Number e Cost).
  • Um grupo de colunas (Região).
  • Os grupos de linhas e colunas são classificados por nome (e não por Quantidade) em cada grupo, colocando a tabela em ordem alfabética. Para fazer isso, omita o campo valueBucket do PivotGroup.
  • Para simplificar a aparência da tabela, a solicitação oculta subtotais para todos os grupos de linhas e colunas, exceto os principais.
  • A solicitação define valueLayout como VERTICAL para melhorar a aparência da tabela. valueLayout só será importante se houver dois ou mais grupos de valores.

Confira o protocolo da solicitação abaixo.

POST https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID:batchUpdate
{
  "requests": [
    {
      "updateCells": {
        "rows": [
              {
            "values": [
              {
                "pivotTable": {
                  "source": {
                    "sheetId": SOURCE_SHEET_ID,
                    "startRowIndex": 0,
                    "startColumnIndex": 0,
                    "endRowIndex": 20,
                    "endColumnIndex": 7
                  },
                  "rows": [
                    {
                      "sourceColumnOffset": 0,
                      "showTotals": true,
                      "sortOrder": "ASCENDING"
                    },
                    {
                      "sourceColumnOffset": 1,
                      "showTotals": false,
                      "sortOrder": "ASCENDING",
                    },
                    {
                      "sourceColumnOffset": 2,
                      "showTotals": false,
                      "sortOrder": "ASCENDING",
                    }
                  ],
                  "columns": [
                    {
                      "sourceColumnOffset": 4,
                      "sortOrder": "ASCENDING",
                      "showTotals": true
                    }
                  ],
                  "values": [
                    {
                      "summarizeFunction": "SUM",
                      "sourceColumnOffset": 3
                    },
                    {
                      "summarizeFunction": "CUSTOM",
                      "name": "Total Price",
                      "formula": "=Cost*SUM(Quantity)"
                    }
                  ],
                  "valueLayout": "VERTICAL"
                }
              }
            ]
          }
        ],
        "start": {
          "sheetId": SHEET_ID,
          "rowIndex": 49,
          "columnIndex": 0
        },
        "fields": "pivotTable"
      }
    }
  ]
}

A solicitação cria uma tabela dinâmica como esta:

Adicionar resultado do roteiro do grupo de valores dinâmicos

Excluir uma tabela dinâmica

O exemplo de código spreadsheets.batchUpdate abaixo mostra como usar o UpdateCellsRequest para excluir uma tabela dinâmica (se houver) ancorada na célula A50 da página especificada por SHEET_ID.

Um UpdateCellsRequest pode remover uma tabela dinâmica incluindo "pivotTable" no parâmetro fields e omitindo o campo pivotTable na célula de âncora.

Confira o protocolo da solicitação abaixo.

POST https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID:batchUpdate
{
  "requests": [
    {
      "updateCells": {
          "rows": [ 
            {
            "values": [
              {}
            ]
          }
        ],
        "start": {
          "sheetId": SHEET_ID,
          "rowIndex": 49,
          "columnIndex": 0
        },
        "fields": "pivotTable"
      }
    }
  ]
}

Editar linhas e colunas da tabela dinâmica

O exemplo de código spreadsheets.batchUpdate a seguir mostra como usar a UpdateCellsRequest para editar a tabela dinâmica criada em Adicionar uma tabela dinâmica.

Subconjuntos do campo pivotTable no recurso CellData não podem ser alterados individualmente com o parâmetro fields. Para fazer edições, preencha todo o campo pivotTable. Essencialmente, editar uma tabela dinâmica exige que ela seja substituída por uma nova.

A solicitação faz as seguintes alterações na tabela dinâmica original:

  • Remove o grupo da segunda linha da tabela dinâmica original (Número do modelo).
  • Adiciona um grupo de colunas (Vendedor). As colunas são classificadas em ordem decrescente pelo número total de vendas de Panel. "Carmen" (15 vendas de Panel) aparece à esquerda de "Jessie" (13 vendas de Panel).
  • Recolhe a coluna de cada Região, exceto "Oeste", ocultando o grupo Vendedor dessa região. Isso é feito ao definir collapsed como true na valueMetadata dessa coluna no grupo de colunas Região.

Confira o protocolo da solicitação abaixo.

POST https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID:batchUpdate
{
  "requests": [
    {
      "updateCells": {
        "rows": [
            {
          "values": [
              {
                "pivotTable": {
                  "source": {
                    "sheetId": SOURCE_SHEET_ID,
                    "startRowIndex": 0,
                    "startColumnIndex": 0,
                    "endRowIndex": 20,
                    "endColumnIndex": 7
                  },
                  "rows": [
                    {
                      "sourceColumnOffset": 0,
                      "showTotals": true,
                      "sortOrder": "ASCENDING",
                      "valueBucket": {
                        "buckets": [
                          {
                            "stringValue": "West"
                          }
                        ]
                      }
                    }
                  ],
                  "columns": [
                    {
                      "sourceColumnOffset": 4,
                      "sortOrder": "ASCENDING",
                      "showTotals": true,
                      "valueBucket": {},
                      "valueMetadata": [
                        {
                          "value": {
                            "stringValue": "North"
                          },
                          "collapsed": true
                        },
                        {
                          "value": {
                            "stringValue": "South"
                          },
                          "collapsed": true
                        },
                        {
                          "value": {
                            "stringValue": "East"
                          },
                          "collapsed": true
                        }
                      ]
                    },
                    {
                      "sourceColumnOffset": 5,
                      "sortOrder": "DESCENDING",
                      "showTotals": false,
                      "valueBucket": {
                        "buckets": [
                          {
                            "stringValue": "Panel"
                          }
                        ]
                      },
                    }
                  ],
                  "values": [
                    {
                      "summarizeFunction": "SUM",
                      "sourceColumnOffset": 3
                    }
                  ],
                  "valueLayout": "HORIZONTAL"
                }
              }
            ]
          }
        ],
        "start": {
          "sheetId": SHEET_ID,
          "rowIndex": 49,
          "columnIndex": 0
        },
        "fields": "pivotTable"
      }
    }
  ]
}

A solicitação cria uma tabela dinâmica como esta:

Editar resultado do roteiro da tabela dinâmica

Ler dados da tabela dinâmica

O exemplo de código spreadsheets.get a seguir mostra como acessar dados da tabela dinâmica de uma planilha. O parâmetro de consulta fields especifica que apenas os dados da tabela dinâmica devem ser retornados (e não os dados do valor da célula).

Confira o protocolo da solicitação abaixo.

GET https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID?fields=sheets(properties.sheetId,data.rowData.values.pivotTable)

A resposta consiste em um recurso Spreadsheet, que contém um objeto Sheet com elementos SheetProperties. Há também uma matriz de elementos GridData com informações sobre o PivotTable. As informações da tabela dinâmica são contidas no recurso CellData da página em que a tabela está ancorada (ou seja, no canto superior esquerdo). Se um campo de resposta for definido com o valor padrão, ele será omitido da resposta.

Neste exemplo, a primeira página (SOURCE_SHEET_ID) tem os dados de origem da tabela brutos, enquanto a segunda página (SHEET_ID) tem a tabela dinâmica, ancorada em B3. As chaves vazias indicam páginas ou células que não contêm dados da tabela dinâmica. Para referência, essa solicitação também retorna os IDs das planilhas.

{
  "sheets": [
    {
      "data": [{}],
      "properties": {
        "sheetId": SOURCE_SHEET_ID
      }
    },
    {
      "data": [
        {
          "rowData": [
            {},
            {},
            {
              "values": [
                {},
                {
                  "pivotTable": {
                    "columns": [
                      {
                        "showTotals": true,
                        "sortOrder": "ASCENDING",
                        "sourceColumnOffset": 4,
                        "valueBucket": {}
                      }
                    ],
                    "rows": [
                      {
                        "showTotals": true,
                        "sortOrder": "ASCENDING",
                        "valueBucket": {
                          "buckets": [
                            {
                              "stringValue": "West"
                            }
                          ]
                        }
                      },
                      {
                        "showTotals": true,
                        "sortOrder": "DESCENDING",
                        "valueBucket": {},
                        "sourceColumnOffset": 1
                      }
                    ],
                    "source": {
                      "sheetId": SOURCE_SHEET_ID,
                      "startColumnIndex": 0,
                      "endColumnIndex": 7,
                      "startRowIndex": 0,
                      "endRowIndex": 20
                    },
                    "values": [
                      {
                        "sourceColumnOffset": 3,
                        "summarizeFunction": "SUM"
                      }
                    ]
                  }
                }
              ]
            }
          ]
        }
      ],
      "properties": {
        "sheetId": SHEET_ID
      }
    }
  ],
}