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

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

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

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

Бест, -Abhi

66 голосов | спросил Abhi 13 MarpmTue, 13 Mar 2012 22:46:51 +04002012-03-13T22:46:51+04:0010 2012, 22:46:51

7 ответов


0

(июнь-декабрь 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]) и используйте последнюю версию API Sheets v4 + , которая является гораздо более мощной & амп; гибкий, чем старые версии API.

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

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

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

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

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

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

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

ответил wescpy 16 J0000006Europe/Moscow 2016, 23:32:59
0

Посмотрите GitHub - gspread .

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

first_col = worksheet.col_values(1)

и целая строка на

second_row = worksheet.row_values(2)

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

ответил Arthur G 7 PMpSat, 07 Apr 2012 20:35:49 +040035Saturday 2012, 20:35:49
0

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

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

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

ответил Josh Brown 1 MarpmFri, 01 Mar 2013 20:55:14 +04002013-03-01T20:55:14+04:0008 2013, 20:55:14
0

Посмотрите на распространенный порт для 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]")

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

Автор здесь.

ответил nithin 20 FebruaryEurope/MoscowbMon, 20 Feb 2017 23:22:27 +0300000000pmMon, 20 Feb 2017 23:22:27 +030017 2017, 23:22:27
0

В последнем документе 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()
ответил Tim McDonald 13 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 13 Sep 2016 07:13:41 +0300 2016, 07:13:41
0

Вы можете посмотреть 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()

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

ответил Philippe Oger 3 MonEurope/Moscow2018-12-03T11:33:32+03:00Europe/Moscow12bEurope/MoscowMon, 03 Dec 2018 11:33:32 +0300 2018, 11:33:32
0

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

ответил Ambidextrous 14 MaramWed, 14 Mar 2012 00:46:02 +04002012-03-14T00:46:02+04:0012 2012, 00:46:02

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132