it-swarm.com.ru

Как получить доступ (читать, писать) к таблицам Google Sheets с помощью Python?

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

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

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

Лучшее, - Аби

66
Abhi

(Июнь-декабрь 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, и что модель безопасности была обновлена ​​в Aug 2016 . Чтобы узнать больше, проверьте мой ресурс G + полностью обновлен из Google Developer Expert .

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

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

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

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

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

96
wescpy

Взгляните на GitHub - gspread

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

first_col = worksheet.col_values(1)

и целый ряд 

second_row = worksheet.row_values(2)

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

53
Arthur G

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

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

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

28
Josh Brown

Взгляните на большой порт для 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("[email protected]")

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

Автор здесь. 

7
nithin

В последнем документе 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 __== '__main__':
    add_todo()
7
Tim McDonald

Вы могли бы взглянуть на Sheetfu . Ниже приведен пример из 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
Philippe Oger