Пишу те, що накодив сам.
Важливо: про те, як налаштувати обліковий запис та отримати 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 коректно, поскладав у той-же файл, хоча треба було рознести по різних. При записі даних я не перевіряю дані бо перевірка проходить перед формуванням запиту на запис в таблицю. Для прототипу – норм.
В процесі роботи досить часто звертаюсь для оновлення даних з таблиць, тому застосунок інколи довго “висить” коли чекає підтвердження запису (перечитую з таблиці данні після кожного запису – це довго)