it-swarm.dev

Como acesso (leio, escrevo) planilhas do Planilhas Google ao Python?

Eu estou querendo saber se você pode me apontar para um exemplo de leitura/escrita para/de um google doc/planilha usando python. 

Eu olhei para a API do Google Docs aqui https://developers.google.com/google-apps/spreadsheets/ mas não tenho certeza se eu acertar o link certo. Também um exemplo será de grande ajuda.

O que eu estou tentando fazer é consultar planilhas com base nas diferentes colunas mais como uma consulta SQL e, em seguida, fazer algumas análises downstream com os dados e colocá-los em outra planilha ou documento no Google Docs.

Melhor, - Abhi

66
Abhi

(Jun-dez 2016) A maioria das respostas aqui estão desatualizadas como: 1) GData APIs são a geração anterior de APIs do Google, e é por isso que foi difícil para @ Josh Brown para encontrar a documentação antiga da API do GData Docs. Embora nem todas as APIs GData tenham sido preteridas, all newer APIs do Google do not usam o protocolo de dados do Google ; e 2) Google lançou uma nova API do Google Sheets (não GData). Para usar a nova API, você precisa obter a biblioteca cliente de APIs do Google para Python (é tão fácil quanto pip install -U google-api-python-client [ou pip3 para Python 3]) e usar a mais recente Sheets API v4 + , que é muito mais poderoso e flexível do que versões mais antigas da API.

Aqui está uma amostra de código dos documentos oficiais para ajudá-lo com o kickstart. No entanto, aqui estão exemplos um pouco mais longos e mais "reais" de usar a API da qual você pode aprender (vídeos mais postagens de blog):

A mais recente API do Sheets fornece recursos não disponíveis em versões mais antigas, dando aos desenvolvedores acesso programático a uma planilha como se você estivesse usando a interface do usuário (criar linhas congeladas, executar formatação de célula, redimensionar linhas/colunas, adicionar tabelas dinâmicas, criar gráficos etc. .), mas NÃO como se fosse algum banco de dados que você poderia realizar pesquisas e obter linhas selecionadas de. Você basicamente teria que criar uma camada de consulta sobre a API que faz isso. Uma alternativa é usar a linguagem de consulta da API de visualização do Google Charts , que suporta consulta do tipo SQL . Você também pode consultar a partir da própria pasta . Esteja ciente de que essa funcionalidade existia antes da API v4 e de que o modelo de segurança foi atualizado em ago 2016 . Para saber mais, marque meu compartilhamento de G + com um artigo completo de um Google Developer Expert .

Observe também que a Sheets API é principalmente para acessar programaticamente as operações e funcionalidades da planilha conforme descrito acima, mas para executar file -level access como importações/exportações, copiar, mover, renomear etc. a API do Google Drive em vez disso. Exemplos de uso da API do Drive:

(*) - TL; DR: carrega o arquivo de texto simples no Drive, importa/converte para o formato do Google Docs e exporta esse documento como PDF. A postagem acima usa a Drive API v2; esta postagem de acompanhamento descreve a migração para a API do Google Drive v3, e aqui está um vídeo de desenvolvedor combinação de postagens de "conversas do homem pobre".

Para saber mais sobre como usar as APIs do Google com o Python em geral, confira meu blog assim como uma variedade de vídeos de desenvolvedores do Google ( series 1 e series 2 ) .

ps. No que diz respeito ao Google Docs, não há uma API REST disponível no momento, portanto, a única maneira de acessar programaticamente um Doc é usando Script do Google Apps (que como o Node.js é JavaScript fora do navegador, mas em vez de ser executado em um servidor Node, esses aplicativos são executados na nuvem do Google, também confira meu intro video .) Com o Google Apps Script, você pode criar um Docs app ou um complemento para o Documentos (e outros itens, como Planilhas e formulários).

UPDATE Jul 2018: O "ps" acima. não é mais verdade. A equipe de desenvolvedores do G Suite anunciou uma nova API do Google Docs REST no Google Cloud NEXT '18. Os desenvolvedores interessados ​​em acessar o programa de acesso antecipado à nova API devem se registrar em https://developers.google.com/docs

96
wescpy

Dê uma olhada em GitHub - gspread

Eu achei muito fácil de usar e desde que você pode recuperar uma coluna inteira por 

first_col = worksheet.col_values(1)

e uma linha inteira por 

second_row = worksheet.row_values(2)

você pode mais ou menos construir alguns ... de seleção básica onde ... = ... facilmente.

53
Arthur G

Eu sei que esse segmento já é antigo, mas há uma documentação decente na Google Docs API. Foi ridiculamente difícil de encontrar, mas útil, então talvez isso ajude você. http://pythonhosted.org/gdata/docs/api.html .

Eu usei gspread recentemente para um projeto para representar graficamente os dados de tempo dos funcionários. Eu não sei o quanto isso pode ajudá-lo, mas aqui está um link para o código: https://github.com/lightcastle/employee-timecards

Gspread tornou as coisas muito fáceis para mim. Também consegui adicionar lógica para verificar várias condições para criar os resultados do mês até a data e do ano até a data. Mas acabei de importar toda a planilha dang e analisei a partir daí, então não tenho 100% de certeza de que é exatamente o que você está procurando. Boa sorte.

28
Josh Brown

Dê uma olhada na porta gspread para api v4 - pygsheets . Deve ser muito fácil de usar, em vez do cliente do Google.

Exemplo de exemplo

import pygsheets

gc = pygsheets.authorize()

# Open spreadsheet and then workseet
sh = gc.open('my new ssheet')
wks = sh.sheet1

# Update a cell with value (just to let him know values is updated ;) )
wks.update_cell('A1', "Hey yank this numpy array")

# update the sheet with array
wks.update_cells('A2', my_nparray.to_list())

# share the sheet with your friend
sh.share("[email protected]")

Veja os docs aqui .

Autor aqui. 

7
nithin

Os documentos mais recentes do google api documentam como escrever em uma planilha com python, mas é um pouco difícil de navegar. Aqui está um link para um exemplo de como anexar .

O código a seguir é minha primeira tentativa bem-sucedida de anexar a uma planilha do Google.

import httplib2
import os

from apiclient import discovery
import oauth2client
from oauth2client import client
from oauth2client import tools

try:
    import argparse
    flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args()
except ImportError:
    flags = None

# If modifying these scopes, delete your previously saved credentials
# at ~/.credentials/sheets.googleapis.com-python-quickstart.json
SCOPES = 'https://www.googleapis.com/auth/spreadsheets'
CLIENT_SECRET_FILE = 'client_secret.json'
APPLICATION_NAME = 'Google Sheets API Python Quickstart'


def get_credentials():
    """Gets valid user credentials from storage.

    If nothing has been stored, or if the stored credentials are invalid,
    the OAuth2 flow is completed to obtain the new credentials.

    Returns:
        Credentials, the obtained credential.
    """
    home_dir = os.path.expanduser('~')
    credential_dir = os.path.join(home_dir, '.credentials')
    if not os.path.exists(credential_dir):
        os.makedirs(credential_dir)
    credential_path = os.path.join(credential_dir,
                                   'mail_to_g_app.json')

    store = oauth2client.file.Storage(credential_path)
    credentials = store.get()
    if not credentials or credentials.invalid:
        flow = client.flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES)
        flow.user_agent = APPLICATION_NAME
        if flags:
            credentials = tools.run_flow(flow, store, flags)
        else: # Needed only for compatibility with Python 2.6
            credentials = tools.run(flow, store)
        print('Storing credentials to ' + credential_path)
    return credentials

def add_todo():
    credentials = get_credentials()
    http = credentials.authorize(httplib2.Http())
    discoveryUrl = ('https://sheets.googleapis.com/$discovery/rest?'
                    'version=v4')
    service = discovery.build('sheets', 'v4', http=http,
                              discoveryServiceUrl=discoveryUrl)

    spreadsheetId = 'PUT YOUR SPREADSHEET ID HERE'
    rangeName = 'A1:A'

    # https://developers.google.com/sheets/guides/values#appending_values
    values = {'values':[['Hello Saturn',],]}
    result = service.spreadsheets().values().append(
        spreadsheetId=spreadsheetId, range=rangeName,
        valueInputOption='RAW',
        body=values).execute()

if __== '__main__':
    add_todo()
7
Tim McDonald

Você poderia dar uma olhada em Sheetfu . A seguir, um exemplo do README. Ele oferece uma sintaxe super fácil de interagir com planilhas como se fosse uma tabela de banco de dados.

from sheetfu import Table

spreadsheet = SpreadsheetApp('path/to/secret.json').open_by_id('<insert spreadsheet id here>')
data_range = spreadsheet.get_sheet_by_name('people').get_data_range()

table = Table(data_range, backgrounds=True)

for item in table:
    if item.get_field_value('name') == 'foo':
        item.set_field_value('surname', 'bar')              # this set the surname field value
    age = item.get_field_value('age')
    item.set_field_value('age', age + 1)
    item.set_field_background('age', '#ff0000')             # this set the field 'age' to red color

# Every set functions are batched for speed performance.
# To send the batch update of every set requests you made,
# you need to commit the table object as follow.
table.commit()

Disclaimer: Eu sou o autor desta biblioteca.

0
Philippe Oger