Пишу те, що накодив сам.
Важливо: про те, як налаштувати обліковий запис та отримати json-файл для підключення до документів з правами на редагування – то читачам домашнє завдання 🙂
Для роботи створив модуль gstools куди складаю функції, які використовую для читання-запису в таблицю Google.
наприклад читання усієї сторінки:
def read_from_worksheet(work_book_name, worksheet_name):
scope = ['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive']
creds = ServiceAccountCredentials.from_json_keyfile_name('rrrrr-rrr-483eee24587fa.json', scope)
client = gspread.authorize(creds)
worksheet = client.open(work_book_name).worksheet(worksheet_name)
return worksheetдодати нові данні (стрічка-row)
def write_to_workbook(row_name, row_data, work_book_name, worksheet_name):
# document-specific operation! Be careful if copy it
scope = ['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive']
creds = ServiceAccountCredentials.from_json_keyfile_name('rrrrr-rrr-483eee24587fa.json', scope)
client = gspread.authorize(creds)
worksheet1 = client.open(work_book_name).worksheet(worksheet_name)
worksheet1.update('A' + str(row_name), [row_data])Так, є що доробляти. Але воно маленьке та працює, за умови що се прототип – переробляти недоцільно.
Модифікація даних всередині сторінки таблиці. Шукаю в таблиці що треба модифікувати та записую в потрібну комірку необхідні данні (це результат творчості для завдання – тут тільки факт того, що зробив і воно працює):
def find_and_modify_cell_by_other_cell_value(work_book_name, worksheet_name, column_number, cell_value_to_search,
column_cell_number_to_edit, data_for_enter):
scope = ['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive']
creds = ServiceAccountCredentials.from_json_keyfile_name('rrrrr-rrr-483eee24587fa.json', scope)
client = gspread.authorize(creds)
worksheet1 = client.open(work_book_name).worksheet(worksheet_name)
sheet = worksheet1.get_all_values()
for row_number, row in enumerate(sheet):
if cell_value_to_search in row[column_number]:
worksheet1.update_cell(row_number+1, column_cell_number_to_edit, data_for_enter)
return worksheet_name, row[column_number], data_for_enterУсі інші функції спираються на вищевказані та працюють IMHO коректно, поскладав у той-же файл, хоча треба було рознести по різних. При записі даних я не перевіряю дані бо перевірка проходить перед формуванням запиту на запис в таблицю. Для прототипу – норм.
В процесі роботи досить часто звертаюсь для оновлення даних з таблиць, тому застосунок інколи довго “висить” коли чекає підтвердження запису (перечитую з таблиці данні після кожного запису – це довго)