Подтвердить что ты не робот

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

Мне интересно, можете ли вы указать мне пример чтения/записи в/из doc/электронной таблицы google с использованием python.

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

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

Бест, -Abhi

4b9b3361

Ответ 1

(Июнь-декабрь 2016 г.) Большинство ответов здесь устарели: 1) API-интерфейсы GData - это API-интерфейсы Google предыдущего поколения, и поэтому @Джошу Брауну было трудно найти эту старую документацию по API-интерфейсу GData Docs. Хотя не все API GData устарели, все более новые API Google не используют протокол Google Data; и 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+ на полную запись -U p от Google Developer Expert.

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

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

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

пс. Что касается Google Docs, то в настоящее время API REST недоступен, поэтому единственный способ программного доступа к Doc - это использование скрипта Google Apps (который, как и 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 Docs, запущенный для предварительного просмотра в июле прошлого года, теперь доступен в основном для всех... читайте пост запуска для более подробной информации.

Ответ 2

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

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

first_col = worksheet.col_values(1)

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

second_row = worksheet.row_values(2)

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

Ответ 3

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

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

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

Ответ 4

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

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

Автор здесь.

Ответ 5

Последний документ 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()

Ответ 6

Вы могли бы взглянуть на 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()

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

Ответ 7

Эта тема кажется довольно старой. Если кто-то еще ищет, шаги, упомянутые здесь: 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 с текущими учетными данными.

Ответ 8

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