В этой статье рассказывается, как автоматически обновлять Google Sheet с помощью Python, уделяя особое внимание моим наиболее часто используемым методам:

  • Создать новый лист
  • Обновить существующий лист
  • Добавить к существующему листу

Для начала следуйте гайду, чтобы получить свои учетные данные и установить библиотеку. В файле учетных данных вы найдете адрес электронной почты. Чтобы изменить существующую электронную таблицу, необходимо предоставить разрешение на редактирование электронной почте клиента. Затем мы можем начать играть с API.

Подключиться к Google API

from oauth2client.service_account import ServiceAccountCredentials
from googleapiclient import discovery
SCOPES = ['https://www.googleapis.com/auth/drive']
creds = ServiceAccountCredentials.from_json_keyfile_name(
    'credentials.json', SCOPES)
service = discovery.build('sheets', 'v4', credentials=creds)

При первом выполнении фрагмента кода он направит пользователей на страницу авторизации. Войдите в свою учетную запись Google, чтобы авторизоваться.

Создать новый лист

Этот метод создаст новый лист в существующей электронной таблице. spreadsheetId можно найти в URL-адресе.

Формат URL: https://docs.google.com/spreadsheets/d/spreadsheetId/edit#gid=0.

from pprint import pprint
# fill in spreadsheetId
spreadsheetId = '1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
# name your new sheet
title = 'MySheet'
# call the Sheets API
body = {'requests': [
    {
        'addSheet': {
            'properties': {
                'title': title
            }
        }
    }]}
request = service.spreadsheets().batchUpdate(
    spreadsheetId=spreadsheetId, 
    body=body)
response = request.execute()
pprint(response)

Обновить существующий лист

Этот метод будет записывать данные из первой строки или любой строки, указанной в range_.

spreadsheetId = '1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
range_ = 'MySheet!A1:C'
values = [
    ['date', 'event', 'count'],
    ['6/1', 'login', 100]
]
body = {
    'range': range_, 
    'values': values, 
    'majorDimension': 'ROWS'
}
request = service.spreadsheets().values().update(
    spreadsheetId=spreadsheetId, 
    range=range_, 
    valueInputOption='USER_ENTERED',
    body=body)
response = request.execute()
pprint(response)

Добавить к существующему листу

Этот метод добавит данные к существующему набору данных в электронной таблице.

spreadsheetId = '1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
range_ = 'MySheet!A:C'
values = [
    ['6/2', 'login', 200],
    ['6/2', 'complain', 1]
]
body = {
    'range': range_, 
    'values': values, 
    'majorDimension': 'ROWS'
}
request = service.spreadsheets().values().append(
    spreadsheetId=spreadsheetId, 
    range=range_, 
    valueInputOption='USER_ENTERED',
    insertDataOption='INSERT_ROWS',
    body=body)
response = request.execute()
pprint(response)

Использованная литература:



Спасибо за чтение!