Как получить доступ (читать, писать) к таблицам Google Sheets с помощью Python? - PullRequest
67 голосов
/ 13 марта 2012

Мне интересно, можете ли вы указать мне пример чтения / записи в / из документа Google / таблицы с использованием Python.

Я смотрел API Google docs здесь https://developers.google.com/google-apps/spreadsheets/, но не уверен, что нажал правильную ссылку.Также очень поможет пример.

То, что я пытаюсь сделать, - это запросить таблицы на основе различных столбцов, более похожих на запрос SQL, а затем выполнить некоторый последующий анализ данных и поместить их в другую таблицу илидокумент на Google Docs.

Best, -Abhi

Ответы [ 8 ]

98 голосов
/ 16 июня 2016

(июнь-декабрь 2016 г.) Большинство ответов здесь уже устарели: 1) API GData - это API Google предыдущего поколения, и поэтому оно былотрудно @ Джошу Брауну найти старую документацию по API GData Docs.Хотя не все API GData устарели, все новее API Google делают не используют протокол данных Google ;и 2) Google выпустил новый API Google Sheets (не GData).Чтобы использовать новый API, вам необходимо получить клиентскую библиотеку API Google для Python (это так же просто, как pip install -U google-api-python-client [или pip3 для Python 3]) и использовать последнюю версию Sheets API v4 + , который является гораздо более мощным и гибким, чем более старые выпуски API.

Вот один пример кода из официальных документов, чтобы помочь вам начать работу.Однако вот несколько более длинных, более «реальных» примеров использования API, из которых вы можете поучиться (видео и сообщения в блогах):

Последний API Sheets предоставляет функции, недоступные в более старых выпусках, а именно предоставляет разработчикам программный доступ к Sheet, как будто выиспользовали пользовательский интерфейс (создавали замороженные строки, выполняли форматирование ячеек, изменяли размеры строк / столбцов, добавляли сводные таблицы, создавали диаграммы и т. д.), но НЕ, как если бы это была какая-то база данных, по которой можно было выполнять поиск и получать выбранные строки.Вы должны в основном построить слой запросов поверх API, который делает это.В качестве альтернативы можно использовать язык запросов API Google Charts Visualization , который поддерживает SQL-подобные запросы .Вы также можете запросить из самого листа .Помните, что эта функциональность существовала до API v4, и что модель безопасности была обновлена ​​в август 2016 .Чтобы узнать больше, отметьте my G + Reshare для полной записи от Google Developer Expert .

Также обратите внимание, что API Sheets в первую очередь предназначен для программного доступа к электронной таблице.операции и функции, как описано выше, но для выполнения файла -уровня доступа , такого как импорт / экспорт, копирование, перемещение, переименование и т. д., используйте GoogleDrive API вместо этого.Примеры использования Drive API:

(*) - TL; DR: загрузить простой текстовый файл на диск, импортировать / преобразовать в формат Google Docs, а затем экспортировать этот документ в PDF.Пост выше использует Drive API v2; в этом последующем посте описывается его миграция на Drive API v3, а также видео для разработчиков , объединяющее оба поста "Конвертер бедняков".

Чтобы узнать больше о том, какчтобы использовать API Google с Python в целом, посмотрите мой блог , а также множество видео для разработчиков Google ( серия 1 и серия 2 ).производство.

пс.Что касается Google Docs , то в настоящее время API-интерфейс REST недоступен, поэтому единственный способ программного доступа к документу - это использование Google Apps Script (например, Node)..js - это JavaScript вне браузера, но вместо того, чтобы работать на сервере Node, эти приложения работают в облаке Google; также посмотрите мое вступительное видео .) С помощью скрипта Apps вы можете создать Приложение Docs или дополнение для Docs (и других вещей, таких как Sheets & Forms).

ОБНОВЛЕНИЕ Июль 2018 : Вышеуказанное "пс". больше не правда. Команда разработчиков G Suite предварительно анонсировала новый REST API Google Docs на Google Cloud NEXT '18. Разработчики, заинтересованные в получении доступа к программе раннего доступа к новому API, должны зарегистрироваться по адресу https://developers.google.com/docs.

ОБНОВЛЕНИЕ Февраль 2019 : API Документов, запущенный для предварительного просмотра в июле прошлого года, теперь доступен, как правило, всем ... читайте сообщение о запуске для получения более подробной информации.

54 голосов
/ 07 апреля 2012

Посмотрите на GitHub - распространенный .

Я обнаружил, что им очень легко пользоваться, и, поскольку вы можете извлечь целый столбец по

first_col = worksheet.col_values(1)

и целую строку по

second_row = worksheet.row_values(2)

, вы можете большеили меньше создайте базовый выбор ..., где ... = ... легко.

28 голосов
/ 01 марта 2013

Я знаю, что эта ветка устарела, но вот некоторая достойная документация по Google Docs API Это было нелепо трудно найти, но полезно, так что, возможно, это поможет вам. http://pythonhosted.org/gdata/docs/api.html.

Я недавно использовал gspread для проекта для отображения данных о времени сотрудников. Я не знаю, насколько это может вам помочь, но вот ссылка на код: https://github.com/lightcastle/employee-timecards

Бред сделал все довольно легко для меня. Я также смог добавить логику для проверки различных условий для создания результатов по месяцам и годам. Но я просто импортировал всю чертову электронную таблицу и проанализировал ее оттуда, так что я не уверен на 100%, что это именно то, что вы ищете. Желаем удачи.

10 голосов
/ 20 февраля 2017

Взгляните на большой порт для api v4 - pygsheets . Он должен быть очень простым в использовании, а не клиентом Google.

Пример примера

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("myFriend@gmail.com")

См. Документы здесь .

Автор здесь.

8 голосов
/ 13 сентября 2016

В последнем документе google api docs описывается, как писать в электронную таблицу с python, но переходить к ней немного сложно.Вот ссылка на пример добавления .

Следующий код - моя первая успешная попытка добавления в таблицу 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 __name__ == '__main__':
    add_todo()
1 голос
/ 03 декабря 2018

Вы можете взглянуть на Лист . Ниже приведен пример из README. Это дает супер легкий синтаксис для взаимодействия с электронными таблицами, как если бы это была таблица базы данных.

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()

Отказ от ответственности: я являюсь автором этой библиотеки.

0 голосов
/ 11 июня 2019

Эта тема выглядит довольно старой. Если кто-то все еще ищет, шаги, упомянутые здесь: https://github.com/burnash/gspread работают очень хорошо.

import gspread
from oauth2client.service_account import ServiceAccountCredentials
import os

os.chdir(r'your_path')

scope = ['https://spreadsheets.google.com/feeds',
     'https://www.googleapis.com/auth/drive']

creds = ServiceAccountCredentials.from_json_keyfile_name('client_secret.json', scope)
gc = gspread.authorize(creds)
wks = gc.open("Trial_Sheet").sheet1
wks.update_acell('H3', "I'm here!")

Удостоверьтесь, что вы удалили ваш json-файл с учетными данными в текущем каталоге Переименуйте его в client_secret.json.

Вы можете столкнуться с ошибками, если не включите Google Sheet API с текущими учетными данными.

0 голосов
/ 14 марта 2012

Я думаю, что вы смотрите в разделе каналов на этой странице документа API.Затем вы можете просто использовать запросы PUT / GET в вашем скрипте Python, используя commands.getstatusoutput или subprocess.

...