Como manipular planilhas do Google com Python

February 16, 2017
Escrito por

Planilhas Google e Python

Este post foi inspirado no lembrete de Patrick McKenzie de que, às vezes, você não precisa de um banco de dados:

Se você está criando um aplicativo CRUD rápido para, por exemplo, uso interno, o Google Docs como um back-end (consumido via JSON) é *surpreendentemente* poderoso.

— Patrick McKenzie (@patio11) 5 de julho de 2014

Neste tutorial, usaremos o excelente pacote Python de Anton Burnashevgspread para ler, escrever e excluir dados de uma planilha do Google com poucas linhas de código. 

API do Google Drive e contas de serviço

Sei que parece óbvio, mas você precisará de uma planilha se quiser acompanhar este post. Se você não possui dados suficientes em uma planilha, que tal copiar esta planilha com informações de contato de todos os legisladores dos Estados Unidos? (Nota rápida: Ian Webster usa esses dados na plataforma da Twilio para facilitar que cidadãos liguem para o congresso).

Menu da Planilha do Google para copiar o arquivo.

Para acessar a planilha de forma programática, você precisará criar uma conta de serviço e credenciais do OAuth2 no Painel de APIs do Google. Se você tem algum trauma quanto ao desenvolvimento do OAuth2, não se preocupe; as contas de serviço são muito mais fáceis de usar.

Siga as etapas e o GIF a seguir. Você estará dentro e fora do painel em 60 segundos (igual ao filme homônimo estrelado por Nicolas Cage).

  1. Vá até o Painel de APIs do Google.
  2. Crie um projeto.
  3. Clique em Enable API (Ativar API). Pesquise e ative a Google Drive API.
  4. Clique em Create credentials (Criar credenciais) para que um servidor Web acesse os dados do aplicativo.
  5. Atribua um nome à conta de serviço e conceda a ela a função de Editor do Projeto.
  6. Faça download do arquivo JSON.
  7. Copie o arquivo JSON no seu diretório de códigos e renomeie-o como client_secret.json

Criando uma conta de serviço do Google Cloud

Há uma última etapa necessária para autorizar seu app e que é normalmente esquecida!

Encontre o client_email dentro do client_secret.json. De volta à planilha, clique no botão Share (Compartilhar) no canto superior direito e cole o e-mail do cliente no campo People (Pessoas) para conceder direitos de edição. Clique em Send (Enviar).

Se você ignorar essa etapa, receberá a mensagem de erro gspread.exceptions.SpreadsheetNotFound quando for tentar acessar a planilha no Python.

Compartilhando a planilha do Google com a conta de serviço.

Parte chata: concluída! Agora vamos para o código.

Leitura de dados de uma planilha com Python

Com as credenciais criadas (você as copiou no seu diretório de códigos, certo?), o acesso a uma planilha do Google no Python requer apenas dois pacotes:

  1. oauth2client: para autorizar o uso do OAuth 2.0 com a Google Drive API.
  2. gspread: para interagir com planilhas do Google

Instale esses pacotes com:

pip install gspread oauth2client

Em seguida, cole esse código em um novo arquivo chamado spreadsheet.py:

import gspread
from oauth2client.service_account import ServiceAccountCredentials


# use creds to create a client to interact with the Google Drive API
scope = ['https://spreadsheets.google.com/feeds']
creds = ServiceAccountCredentials.from_json_keyfile_name('client_secret.json', scope)
client = gspread.authorize(creds)

# Find a workbook by name and open the first sheet
# Make sure you use the right name here.
sheet = client.open("Copy of Legislators 2017").sheet1

# Extract and print all of the values
list_of_hashes = sheet.get_all_records()
print(list_of_hashes)

Execute o spreadsheet.py em Python e maravilhe-se com os dados fantásticos e bem formatados.

Exemplo de captura dos dados via script.

Inserir, atualizar e excluir dados de uma planilha com Python

Acabamos de apresentar uma visão geral sobre a funcionalidade bem documentada e abrangente do gspreads. 

Por exemplo, extraímos os dados de uma lista de hashes, mas você poderá obter uma lista de listas se preferir:

sheet.get_all_values()

Ou poderá apenas extrair os dados de uma única linha, coluna ou célula:

sheet.row_values(1)

sheet.col_values(1)

sheet.cell(1, 1).value

Você pode escrever na planilha ao alterar uma célula específica:

sheet.update_cell(1, 1, "I just wrote to a spreadsheet using Python!")

Ou pode inserir uma linha na planilha:

row = ["I'm","inserting","a","row","into","a,","Spreadsheet","with","Python"]
index = 1
sheet.insert_row(row, index)

Você também pode excluir uma linha da planilha:

sheet.delete_row(1)

E descobrir o número total de linhas:

sheet.row_count

Para obter detalhes sobre essas funções e outras dezenas disponíveis, consulte a Referência da API do gspread . 

O uso de planilhas do Google com Python abre possibilidades, como a criação de um app Flask com uma planilha como a camada de persistência ou a importação de dados de uma planilha do Google no Jupyter Notebooks e a realização de análises em Pandas. Se você quiser começar a testar Python e Twilio, confira nossos Guias de início rápido do Python.

Este artigo foi traduzido do original "Google Spreadsheets and Python". Enquanto melhoramos nossos processos de tradução, adoraríamos receber seus comentários em help@twilio.com - contribuições valiosas podem render brindes da Twilio.