Migrar da API Sheets v3

Se você tem aplicativos baseados na API Google Sheets v3, pode migrar para a API Google Sheets v4. A versão v4 é baseada em JSON, tem uma interface mais fácil de usar e adiciona uma quantidade substancial de funcionalidades que não são possíveis na versão v3.

Nesta página, você encontra um mapeamento entre os antigos comandos da API Sheets v3 e as operações equivalentes deles na API Sheets v4. O mapeamento se concentra em grande parte na coleção spreadsheets.values, que fornece a funcionalidade direta de leitura e gravação de células. Outros aspectos, como a adição de páginas ou a atualização de propriedades da página, são tratados pela coleção spreadsheets. Observe que as estruturas JSON da API v4 não são compatíveis com as estruturas XML usadas na v3.

Para mais informações sobre os recursos disponíveis na API Sheets v4, consulte a Referência da API.

Notação e termos

A API v3 refere-se às páginas de uma planilha específica como "planilhas". Esse é sinônimo do termo “sheets” usado pela API v4.

Geralmente, as APIs exigem que você especifique um ID da planilha em que você está trabalhando. Elas também costumam exigir o ID da planilha que está sendo manipulada. Esses valores aparecem como parte do URL do endpoint da API, como parâmetros de consulta ou como parte do corpo de uma solicitação. Nesta página, os marcadores de posição spreadsheetId e sheetId se referem aos IDs da planilha e da página, respectivamente. Ao usar os métodos descritos nesta página, substitua os IDs reais nesses locais.

A API v3 também atribui um ID às linhas recuperadas usando seu feed de lista. Isso é representado nesta página pelo marcador rowId.

Autorizar solicitações

Quando o app é executado, ele solicita que os usuários concedam determinadas permissões. Os escopos especificados no aplicativo determinam quais permissões serão solicitadas.

API v3

A Sheets API v3 opera com um único escopo de autorização:

https://spreadsheets.google.com/feeds

que é um alias

https://www.googleapis.com/auth/spreadsheets

Qualquer um dos formatos de escopo pode ser usado.

API v4

A Sheets API v4 usa um ou mais dos seguintes conjuntos de escopos:

https://www.googleapis.com/auth/spreadsheets.readonly
https://www.googleapis.com/auth/spreadsheets
https://www.googleapis.com/auth/drive.readonly
https://www.googleapis.com/auth/drive

Use escopos somente leitura se o aplicativo não precisar fazer edições nas páginas ou propriedades de páginas de um usuário. Use escopos de planilhas em vez de escopos do Drive se o aplicativo não precisar de acesso geral ao Drive.

Visibilidade

Nas versões mais antigas da API, o termo visibilidade é usado para se referir à disponibilidade de uma determinada planilha.

API v3

A Sheets API v3 expressa visibilidade diretamente em seus pontos de extremidade. Uma planilha public foi "Publicado na Web" e, portanto, pode ser acessada pela API sem autorização, enquanto uma planilha private requer autenticação. A visibilidade é especificada no endpoint após o ID da planilha:

https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full

API v4

Na nova API Sheets v4, não há uma declaração de visibilidade explícita. As chamadas de API são feitas usando IDs de planilhas. Se o aplicativo não tiver permissão para acessar a planilha especificada, um erro será retornado. Caso contrário, a chamada continua.

Projeção

O termo projeção é usado pela API Sheets v3 para se referir ao conjunto de dados que é retornado por uma determinada chamada de API: todos ou um subconjunto fixo definido na API. A API Sheets v4 não usa projeção; em vez disso, ela permite mais controle sobre quais dados são retornados.

API v3

Existem apenas duas configurações de projeção possíveis na Sheets API v3. A projeção full retorna todas as informações disponíveis, enquanto basic retorna um subconjunto fixo de dados menor (para os feeds de planilhas, listas e células). Assim como a visibilidade, a projeção precisa ser especificada no endpoint da API (após a configuração de visibilidade):

https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/public/basic

O subconjunto menor de dados fornecido pela projeção basic é valioso para tornar o código mais eficiente, mas não pode ser personalizado.

API v4

Embora a API Sheets v4 possa retornar um conjunto de dados completo, ela não define subconjuntos fixos análogos à configuração de visibilidade basic da API Sheets v3. Os métodos na coleção planilha restringem a quantidade de dados retornados por meio do uso de um parâmetro de consulta fields.

Por exemplo, a consulta a seguir retorna apenas os títulos de todas as páginas em uma planilha específica:

GET https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId?fields=sheets.properties.title

Criar uma planilha

API v3

Com a API Sheets v3, não é possível criar novas planilhas. Em vez disso, o método Files.create da API Drive pode ser usado para criar novos arquivos de planilha. Isso exige que o aplicativo declare o escopo https://www.googleapis.com/auth/drive.

API v4

O método Files.create da API Drive também pode ser usado com a API Sheets v4, mas exige que o aplicativo forneça o escopo https://www.googleapis.com/auth/drive.

Como alternativa equivalente, a API Sheets v4 fornece um método spreadsheets.create, que também pode adicionar páginas, definir as propriedades da planilha e da página e adicionar intervalos nomeados. Por exemplo, o comando a seguir cria uma nova planilha com o nome "NewTitle":

POST https://sheets.googleapis.com/v4/spreadsheets
{
 "properties": {"title": "NewTitle"}
}

Listar planilhas para o usuário autenticado

API v3

O feed da API Sheets v3 permite que um aplicativo recupere uma lista de todas as planilhas que o usuário autenticado pode acessar. O endpoint do feed de planilha é:

GET https://spreadsheets.google.com/feeds/spreadsheets/private/full

API v4

A Sheets API v4 não fornece essa operação específica. Recomendamos migrar seu app para usar o escopo drive.file em combinação com o Google Picker para selecionar planilhas.

Nos casos em que a listagem de planilhas é necessária, ela pode ser replicada pelo método Files.list da API Drive, usando uma consulta mimeType:

GET https://www.googleapis.com/drive/v3/files
             ?q=mimeType='application/vnd.google-apps.spreadsheet'

Usar o método files.list da API Drive para listar todas as planilhas de um usuário requer um escopo restrito.

Recuperar metadados de planilhas

A Sheets API v3 fornece um feed para acessar os metadados da planilha contidos em uma determinada planilha (os dados da linha e da célula são acessados por meio de um feed separado). Os metadados incluem informações como títulos de planilhas e informações de tamanho.

O método spreadsheets.get da API Sheets v4 fornece acesso a essas informações e muito mais.

API v3

O feed de planilhas pode ser acessado a partir desse ponto de extremidade da API (usando um cabeçalho de autorização apropriado):

GET https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full

A resposta a essa solicitação tem uma estrutura semelhante a esta, com os dados de cada página contidos em um <entry> separado:

<feed xmlns="http://www.w3.org/2005/Atom"
    xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/"
    xmlns:gs="http://schemas.google.com/spreadsheets/2006"
    xmlns:gd="http://schemas.google.com/g/2005"
    gd:etag='W/"D0cERnk-eip7ImA9WBBXGEg."'>
  <id>https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full</id>
  <updated>2006-11-17T18:23:45.173Z</updated>
  <title type="text">Groceries R Us</title>
  <link rel="alternate" type="text/html"
      href="https://spreadsheets.google.com/ccc?key=spreadsheetId"/>
  <link rel="http://schemas.google.com/g/2005#feed"
      type="application/atom+xml"
      href="https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full"/>
  <link rel="self" type="application/atom+xml"
      href="https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full"/>
  <link rel="http://schemas.google.com/g/2005#post" type="application/atom+xml"
      href="https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full"/>
  <author>
    <name>Fitzwilliam Darcy</name>
    <email>fitz@example.com</email>
  </author>
  <openSearch:totalResults>1</openSearch:totalResults>
  <openSearch:startIndex>1</openSearch:startIndex>
  <openSearch:itemsPerPage>1</openSearch:itemsPerPage>
  <entry gd:etag='"YDwqeyI."'>
    <id>https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full/sheetId</id>
    <updated>2006-11-17T18:23:45.173Z</updated>
    <title type="text">Sheet1</title>
    <content type="text">Sheet1</content>
    <link rel="http://schemas.google.com/spreadsheets/2006#listfeed"
        type="application/atom+xml"
        href="https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full"/>
    <link rel="http://schemas.google.com/spreadsheets/2006#cellsfeed"
        type="application/atom+xml"
        href="https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full"/>
    <link rel="self" type="application/atom+xml"
        href="https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full/sheetId"/>
    <link rel="edit" type="application/atom+xml"
        href="https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full/sheetId/version"/>
    <gs:rowCount>100</gs:rowCount>
    <gs:colCount>20</gs:colCount>
  </entry>
</feed>

API v4

O método spreadsheets.get pode ser usado para adquirir propriedades da página e outros metadados, muito mais do que a disponível com a API Sheets v3. Se você quiser ler apenas as propriedades da página, defina o parâmetro de consulta includeGridData como false para impedir a inclusão dos dados de células da planilha:

GET https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId?includeGridData=false

A resposta Spreadsheet contém uma matriz de objetos Sheet. Os títulos das páginas e as informações de tamanho especificamente podem ser encontrados no elemento SheetProperties desses objetos. Exemplo:

{
  "spreadsheetId": spreadsheetId,
  "sheets": [
      {"properties": {
          "sheetId": sheetId,
          "title": "Sheet1",
          "index": 0,
          "gridProperties": {
              "rowCount": 100,
              "columnCount": 20,
              "frozenRowCount": 1,
              "frozenColumnCount": 0,
              "hideGridlines": false
          },
          ...
       },
       ...
      },
      ...
  ],
  ...
}

Adicionar uma página a uma planilha

Ambas as APIs permitem que você adicione novas páginas a uma planilha existente.

API v3

A API Sheets v3 pode adicionar novas planilhas a uma planilha fazendo a seguinte solicitação POST (autenticada). Você pode especificar o tamanho da nova planilha:

POST https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full
<entry xmlns="http://www.w3.org/2005/Atom"
    xmlns:gs="http://schemas.google.com/spreadsheets/2006">
  <title>Expenses</title>
  <gs:rowCount>50</gs:rowCount>
  <gs:colCount>10</gs:colCount>
</entry>

API v4

Você pode adicionar novas planilhas fazendo uma solicitação AddSheet no método spreadsheets.batchUpdate. Como parte do corpo da solicitação, especifique as propriedades da nova página. Todas as propriedades são opcionais. É um erro fornecer um título usado para uma planilha existente.

POST https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId:batchUpdate
{
  "requests": [{
      "addSheet": {
          "properties": {
            "title": "Expenses",
            "sheetType": "GRID",
            "gridProperties": {
              "rowCount": 50,
              "columnCount": 10
            }
          }
      }
  }],
}

Alterar o título e o tamanho de uma página

Com a API Sheets v3, você pode atualizar os títulos e o tamanho da planilha. A API Sheets v4 também permite isso, mas também pode ser usada para atualizar outras propriedades da página. Reduzir o tamanho de uma página pode fazer com que os dados nas células cortadas sejam excluídos sem aviso prévio.

API v3

Para alterar o título ou o tamanho de uma planilha, primeiro recupere o feed de planilhas e encontre a entrada desejada, que contém um URL edit. Atualize os metadados da planilha e envie-os como o corpo de uma solicitação PUT para o URL de edição. Exemplo:

PUT https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full/sheetId/version
<entry>
  <id>
    https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full/sheetId
  </id>
  <updated>2007-07-30T18:51:30.666Z</updated>
  <category scheme="http://schemas.google.com/spreadsheets/2006"
    term="http://schemas.google.com/spreadsheets/2006#worksheet"/>
  <title type="text">Expenses</title>
  <content type="text">Expenses</content>
  <link rel="http://schemas.google.com/spreadsheets/2006#listfeed"
    type="application/atom+xml" href="https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full"/>
  <link rel="http://schemas.google.com/spreadsheets/2006#cellsfeed"
    type="application/atom+xml" href="https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full"/>
  <link rel="self" type="application/atom+xml"
    href="https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full/sheetId"/>
  <link rel="edit" type="application/atom+xml"
    href="https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full/sheetId/version"/>
  <gs:rowCount>45</gs:rowCount>
  <gs:colCount>15</gs:colCount>
</entry>

API v4

Para atualizar o tamanho, o título e outras propriedades da página, faça uma solicitação updateSheetProperties no método spreadsheets.batchUpdate. O corpo da solicitação POST precisa conter as propriedades a serem alteradas, e o parâmetro fields precisa listar essas propriedades explicitamente. Se você quiser atualizar todas as propriedades, use fields:"*" como uma abreviação para listar todas. O exemplo a seguir especifica que as propriedades de título e tamanho da página precisam ser atualizadas para a planilha com o ID fornecido:

POST https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId:batchUpdate
{
  "requests": [
    {
      "updateSheetProperties": {
          "properties": {
            "sheetId": sheetId,
            "title": "Expenses",
            "gridProperties": {
              "rowCount": 45,
              "columnCount": 15,
            }
          },
          "fields": "title,gridProperties(rowCount,columnCount)"
     }
   }
  ],
}

Para recuperar o sheetId de uma página, use o método spreadsheets.get da planilha.

Excluir uma página

Qualquer uma das APIs pode remover páginas de uma determinada planilha.

API v3

Para excluir uma planilha, comece recuperando o feed de planilhas e depois envie uma solicitação DELETE no URL edit da entrada da planilha de destino.

DELETE https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full/sheetId/version

API v4

Para excluir uma página, faça uma solicitação DeleteSheet no método spreadsheets.batchUpdate. O corpo da solicitação POST precisa conter apenas o sheetId para que a planilha seja excluída. Exemplo:

POST https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId:batchUpdate
{
  "requests": [
    {
      "deleteSheet": {
        "sheetId": sheetId
      }
    }
  ],
}

Para recuperar o sheetId de uma página individual, use o método spreadsheets.get da planilha.

Recuperar dados da linha

O feed de linhas de lista é um dos dois métodos fornecidos pela API Planilhas v3 para acessar dados nas células de uma planilha (o outro é o feed de células). O feed de linhas visa oferecer suporte a operações de planilha comuns (leitura de linha por linha, anexação de linhas, classificação), mas faz certas suposições que o tornam inadequado para algumas tarefas. Especificamente, o feed de lista presume que as linhas em branco são encerramentos de feed e que cabeçalhos obrigatórios estão presentes na primeira linha de uma planilha.

Em contraste, a API Sheets v4 não usa métodos de acesso específicos de linha. Em vez disso, os dados das células da planilha são acessados com referência aos intervalos específicos necessários usando a notação A1. Os intervalos podem ser blocos de células, linhas inteiras, colunas inteiras ou páginas inteiras. A API também pode acessar conjuntos de células desconexos.

API v3

Para determinar o URL de um feed baseado em lista de uma determinada planilha, recupere o feed de planilhas e encontre o URL do feed de lista na entrada da planilha desejada.

Para recuperar um feed baseado em lista, envie uma solicitação GET para o URL do feed de lista usando um cabeçalho de autorização apropriado. Exemplo:

GET https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full

A resposta a essa solicitação contém, entre outras coisas, entradas correspondentes a linhas específicas. As células individuais são referenciadas pelos nomes fornecidos na linha (obrigatório) do cabeçalho da página. Por exemplo, veja uma única entrada de linha:

<entry gd:etag='"S0wCTlpIIip7ImA0X0QI"'>
  <id>rowId</id>
  <updated>2006-11-17T18:23:45.173Z</updated>
  <category scheme="http://schemas.google.com/spreadsheets/2006"
      term="http://schemas.google.com/spreadsheets/2006#list"/>
  <title type="text">Bingley</title>
  <content type="text">Hours: 10, Items: 2, IPM: 0.0033</content>
  <link rel="self" type="application/atom+xml"
      href="https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full/rowId"/>
  <link rel="edit" type="application/atom+xml"
      href="https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full/rowId/version"/>
  <gsx:name>Bingley</gsx:name>
  <gsx:hours>10</gsx:hours>
  <gsx:items>2</gsx:items>
  <gsx:ipm>0.0033</gsx:ipm>
</entry>

Por padrão, as linhas retornadas no feed de lista são retornadas na ordem das linhas. A Sheets API v3 fornece parâmetros de consulta para alterar essa ordem.

Ordem inversa:

GET https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full?reverse=true

Ordenar por uma coluna específica:

GET https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full
             ?orderby=column:lastname

Com a API Sheets v3, você também pode filtrar linhas específicas por meio de uma consulta estruturada (referenciada pelos cabeçalhos das colunas):

GET https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full
             ?sq=age>25%20and%20height<175

API v4

Com a API Sheets v4, é possível recuperar linhas por intervalo usando os métodos spreadsheets.values.get ou spreadsheets.values.batchGet. Por exemplo, o comando a seguir retorna todas as linhas em "Sheet1":

GET https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId/values/Sheet1

A resposta a essa solicitação tem uma estrutura semelhante a:

{
  "range": "Sheet1",
  "majorDimension": "ROWS",
  "values": [["Name", "Hours", "Items", "IPM"],
             ["Bingley", "10", "2", "0.0033"],
             ["Darcy", "14", "6", "0.0071"]]
}

As células vazias finais não são incluídas na resposta na recuperação de linhas, colunas ou páginas inteiras.

A API Sheets v4 não tem equivalentes para os parâmetros de consulta de ordem de linha fornecidos pela API Sheets v3. A ordem reversa é trivial. Basta processar a matriz values retornada na ordem inversa. A ordenação por coluna não é aceita para leituras, mas é possível classificar os dados na solicitação de planilha (usando uma solicitação SortRange) e depois fazer a leitura deles.

No momento, a API Sheets v4 não tem um equivalente direto para as consultas estruturadas da API Sheets v3. No entanto, é possível recuperar os dados relevantes e classificá-los conforme necessário no aplicativo.

Adicionar uma nova linha de dados

Você pode adicionar uma nova linha de dados a uma planilha usando qualquer uma das APIs.

API v3

Para determinar o URL de um feed baseado em lista de uma determinada planilha, recupere o feed de planilhas e encontre o URL da postagem na entrada desejada.

Para adicionar uma linha de dados, envie uma solicitação POST para o URL da postagem usando um cabeçalho de autorização apropriado. Exemplo:

POST https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full

O corpo da solicitação POST precisa conter uma entrada para os dados da linha a serem adicionados, com células individuais referenciadas pelos cabeçalhos das colunas:

<entry xmlns="http://www.w3.org/2005/Atom"
       xmlns:gsx="http://schemas.google.com/spreadsheets/2006/extended">
  <gsx:hours>2</gsx:hours>
  <gsx:ipm>0.5</gsx:ipm>
  <gsx:items>60</gsx:items>
  <gsx:name>Elizabeth</gsx:name>
</entry>

As novas linhas são anexadas ao final da página especificada.

API v4

Com a API Sheets v4, você pode anexar linhas usando o método spreadsheets.values.append. No exemplo a seguir, uma nova linha de dados é gravada abaixo da última tabela na "Sheet1" de uma planilha.

POST https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId/append/Sheet1

{
   "values": [["Elizabeth", "2", "0.5", "60"]]
}

Com a API Sheets v4, você também pode anexar células com propriedades e formatação específicas usando as solicitações AppendCells em uma spreadsheets.batchUpdate.

Editar uma linha com novos dados

Ambas as APIs permitem que os dados das linhas sejam atualizados com novos valores.

API v3

Para editar uma linha de dados, examine o feed de lista para localizar a entrada da linha que você quer atualizar. Atualize o conteúdo dessa entrada conforme necessário. Verifique se o valor do ID na entrada usada corresponde exatamente ao ID da entrada existente.

Depois que a entrada for atualizada, envie uma solicitação PUT com a entrada como o corpo da solicitação para o URL edit fornecido nessa entrada de linha, usando um cabeçalho de autorização apropriado. Exemplo:

PUT https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full/rowId/version
<entry gd:etag='"S0wCTlpIIip7ImA0X0QI"'>
  <id>rowId</id>
  <updated>2006-11-17T18:23:45.173Z</updated>
  <category scheme="http://schemas.google.com/spreadsheets/2006"
    term="http://schemas.google.com/spreadsheets/2006#list"/>
  <title type="text">Bingley</title>
  <content type="text">Hours: 10, Items: 2, IPM: 0.0033</content>
  <link rel="self" type="application/atom+xml"
    href="https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full/rowId"/>
  <link rel="edit" type="application/atom+xml"
    href="https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full/rowId/version"/>
  <gsx:name>Bingley</gsx:name>
  <gsx:hours>20</gsx:hours>
  <gsx:items>4</gsx:items>
  <gsx:ipm>0.0033</gsx:ipm>
</entry>

API v4

Com a API Sheets v4, você pode editar uma linha usando a notação A1 da linha que quer editar e emitindo uma solicitação spreadsheets.values.update para substituir essa linha. O intervalo especificado precisa se referir apenas à primeira célula na linha. A API infere as células a serem atualizadas com base nos valores fornecidos com a solicitação. Se, em vez disso, você especificar um intervalo com várias células, os valores fornecidos precisarão caber nesse intervalo. Caso contrário, a API retornará um erro.

A solicitação e o corpo da solicitação do exemplo a seguir adicionam dados à quarta linha da "Sheet1":

PUT https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId/values/Sheet1!A4
{
   "values": [["Elizabeth", "2", "0.5", "60"]]
}

Também é possível atualizar os dados da linha com o método spreadsheet.values.batchUpdate. É mais eficiente usar esse método se você estiver fazendo várias atualizações de linha ou célula.

Com a API Sheets v4, você também pode editar as propriedades e formatar células usando as solicitações UpdateCells ou RepeatCell em uma spreadsheets.batchUpdate.

Excluir uma linha

Ambas as APIs permitem a exclusão de linhas. Uma linha excluída é removida da planilha e as linhas abaixo dela são empurradas uma para cima.

API v3

Para excluir uma linha, primeiro recupere a linha a ser excluída do feed de lista e envie uma solicitação DELETE para o URL edit fornecido na entrada da linha. Esse é o mesmo URL usado para atualizar a linha.

DELETE https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full/rowId/version

Se quiser garantir que você não exclua uma linha que tenha sido alterada por outro cliente desde que você a recuperou, inclua um cabeçalho HTTP If-Match que contenha o valor da ETag da linha original. É possível determinar o valor da ETag da linha original examinando o atributo gd:etag do elemento de entrada.

Se quiser excluir a linha, mesmo que outra pessoa a tenha atualizado desde que você a recuperou, use "If-Match: *" e não inclua a ETag. Nesse caso, não é necessário recuperar a linha antes de excluí-la.

API v4

A exclusão de linhas com a API Sheets v4 é processada por uma chamada de método spreadsheet.batchUpdate, usando uma solicitação DeleteDimension. Essa solicitação também pode ser usada para remover colunas, e os desenvolvedores podem optar por remover apenas parte de uma linha ou coluna. O exemplo a seguir remove a 6a linha de uma página com o ID fornecido (os índices de linha são baseados em zero, com startIndex incluído e endIndex excluído):

POST https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId:batchUpdate
{
  "requests": [
    {
      "deleteDimension": {
        "range": {
          "sheetId": sheetId,
          "dimension": "ROWS",
          "startIndex": 5,
          "endIndex": 6
        }
      }
    }
  ],
}

O sheetId de uma página pode ser recuperado com o método spreadsheet.get.

Recuperar dados da célula

A Sheets API v3 fornece um feed de células para acesso básico a todos os dados armazenados em uma planilha. Para acesso de leitura, o feed de células pode fornecer todo o conteúdo da página ou um intervalo de células da página definido por um conjunto de parâmetros de consulta, mas somente como um único bloco. Os intervalos separados precisam ser recuperados separadamente usando outras solicitações GET.

Com a Sheets API v4, você pode recuperar qualquer conjunto de dados de células de uma planilha, incluindo vários intervalos desconexos. A API Sheets v3 só pode retornar conteúdos de células como valores de entrada (que seriam inseridos por um usuário com um teclado) e/ou as saídas de fórmulas (se forem numéricos). A API Sheets v4 concede acesso total a valores, fórmulas, formatação, hiperlinks, validação de dados e outras propriedades.

API v3

Para determinar o URL de um feed baseado em células de uma determinada planilha, examine o feed de planilhas e encontre o URL do feed de células na entrada desejada.

Para recuperar um feed baseado em células, envie uma solicitação GET para o URL de feed de células usando um cabeçalho de autorização apropriado. Exemplo:

GET https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full

As células são referenciadas usando o número da linha e da coluna. É possível buscar um único intervalo específico usando os parâmetros de consulta max-row, min-row, max-col e min-col. Por exemplo, o comando a seguir recupera todas as células na coluna 4 (D), começando com a linha 2:

GET https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full
             ?min-row=2&min-col=4&max-col=4

A API Sheets v3 retorna o inputValue de células recuperadas, o valor que um usuário digitaria na interface do usuário do Planilhas Google para manipular a célula. O inputValue pode ser um valor literal ou uma fórmula. Às vezes, a API também retorna um numericValue. Por exemplo, quando uma fórmula resulta em um número. Por exemplo, uma resposta pode incluir entradas de células com estrutura semelhante a:

<entry gd:etag='"ImB5CBYSRCp7"'>
  <id>https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full/R9C4</id>
  <updated>2006-11-17T18:27:32.543Z</updated>
  <category scheme="http://schemas.google.com/spreadsheets/2006"
    term="http://schemas.google.com/spreadsheets/2006#cell"/>
  <title type="text">D4</title>
  <content type="text">5</content>
  <link rel="self" type="application/atom+xml"
    href="https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full/R9C4"/>
  <link rel="edit" type="application/atom+xml"
    href="https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full/R9C4/srevc"/>
  <gs:cell row="4" col="4" inputValue="=FLOOR(C4/(B4*60),.0001)"
    numericValue="5.0">5</gs:cell>
</entry>

API v4

Recupere dados de células chamando um método spreadsheets.values.get ou spreadsheets.values.batchGet para um ou mais intervalos de interesse, respectivamente. Por exemplo, o comando a seguir retorna as células da coluna D da "Planilha2", começando com a linha 2, na ordem da coluna principal, retornando fórmulas conforme elas são inseridas (as células vazias no final são omitidas):

GET https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId/values/Sheet2!D2:D?majorDimension=COLUMNS&valueRenderOption=FORMULA

A resposta a essa solicitação tem uma estrutura semelhante a:

{
  "spreadsheetId": spreadsheetId,
  "valueRanges": [
      {"range": "Sheet2!D2:D",
       "majorDimension": "COLUMNS",
       "values": [["Widget", 234, "=FLOOR(C4/(B4*60),.0001)", "=D4\*1000"]]
      }]
}

É mais eficiente usar spreadsheet.values.batchGet se você pretende recuperar vários intervalos de dados de células. Para acessar as propriedades da célula como a formatação, o método spreadsheet.get é necessário.

Editar uma célula

Com a API Sheets v3, você pode editar o conteúdo das células emitindo um comando PUT para o feed de células com a entrada de célula modificada como o corpo da solicitação.

A API Sheets v4, por outro lado, fornece os métodos spreadsheets.values.update e spreadsheets.values.batchUpdate para alterar o conteúdo de células.

API v3

Para editar o conteúdo de uma única célula, primeiro encontre a entrada dela no feed de células. A entrada contém um URL de edição. Atualize a entrada para refletir o conteúdo que você quer que a célula tenha e, em seguida, emita uma solicitação PUT para o URL de edição com a entrada atualizada da célula como o corpo da solicitação. Por exemplo, o comando a seguir atualiza a célula D2 (R2C4) para conter uma fórmula SUM:

PUT https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full//R2C4/srevc

<entry xmlns="http://www.w3.org/2005/Atom"
    xmlns:gs="http://schemas.google.com/spreadsheets/2006">
  <id>https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full/R2C4</id>
  <link rel="edit" type="application/atom+xml"
    href="https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full/R2C4"/>
  <gs:cell row="2" col="4" inputValue="=SUM(A1:B6)"/>
</entry>

API v4

A edição de uma única célula na API Sheets v4 pode ser feita com o método spreadsheets.values.update. Esse método exige um parâmetro de consulta ValueInputOption, que especifica se os dados de entrada são tratados como se tivessem sido inseridos na interface do Planilhas (USER_ENTERED) ou não analisados e considerados como estão (RAW). Por exemplo, a célula D2 é atualizada com uma fórmula:

PUT https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId/values/D2?valueInputOption=USER_ENTERED
{"values": [["=SUM(A1:B6)"]]}

Se você estiver fazendo várias edições de células, use o método spreadsheets.values.batchUpdate para emiti-las em uma única solicitação.

Editar várias células com uma solicitação em lote

Ambas as APIs fornecem meios de fazer alterações no conteúdo de várias células com uma única solicitação (lote). As células referenciadas por uma solicitação em lote não precisam estar em um intervalo contínuo.

Quando uma ou mais edições de células no lote falham, a API Sheets v3 permite que as outras tenham êxito. No entanto, a API Sheets v4 retornará um erro se alguma das atualizações em lote falhar e não aplicará nenhuma delas.

API v3

Para editar várias células, primeiro recupere um feed de células para a planilha. A entrada contém um URL de lote. Envie uma solicitação POST para esse URL, além de um corpo que descreva as células que você quer atualizar e o novo conteúdo. A solicitação POST e o corpo da solicitação têm uma estrutura semelhante a esta:

POST https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full/batch
<feed xmlns="http://www.w3.org/2005/Atom"
      xmlns:batch="http://schemas.google.com/gdata/batch"
      xmlns:gs="http://schemas.google.com/spreadsheets/2006">
  <id>https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full</id>
  <entry>
    <batch:id>request1</batch:id>
    <batch:operation type="update"/>
    <id>https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full/R2C4</id>
    <link rel="edit" type="application/atom+xml"
      href="https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full/R2C4/version"/>
    <gs:cell row="2" col="4" inputValue="newData"/>
  </entry>
  ...
  <entry>
    <batch:id>request2</batch:id>
    <batch:operation type="update"/>
    <id>https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full/R2C5</id>
    <link rel="edit" type="application/atom+xml"
      href="https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full/R2C5/version"/>
    <gs:cell row="5" col="2" inputValue="moreInfo"/>
  </entry>
</feed>

O campo batch:id deve identificar exclusivamente a solicitação dentro do lote. O campo batch:operation precisa ser update para edições de células. gs:cell identifica a célula por número de linha e coluna e fornece os novos dados a serem inseridos lá. id contém o URL completo da célula a ser atualizada. link precisa ter um atributo href que contenha o caminho completo para o ID da célula. Todos esses campos são obrigatórios para cada entrada.

API v4

Com a API Sheets v4, você pode editar em lote os valores de células por meio do método spreadsheets.values.batchUpdate.

É possível editar várias células emitindo uma solicitação POST com as alterações de dados especificadas no corpo da solicitação. Exemplo:

POST https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId/values:batchUpdate
{
  "valueInputOption": "USER_ENTERED"
  "data": [
       {"range": "D4",
        "majorDimension": "ROWS",
        "values": [["newData"]]
       },
       {"range": "B5",
        "majorDimension": "ROWS",
        "values": [["moreInfo"]]
       }
  ]
}

Se você especificou uma única célula como o intervalo, todos os valores fornecidos são gravados na página começando com essa célula como coordenada no canto superior esquerdo. Se, em vez disso, você especificar um intervalo com várias células, os valores fornecidos precisarão se encaixar exatamente nesse intervalo. Caso contrário, a API vai retornar um erro.