Этот пост является частью моей серии "30 блогов за 30 дней". Подробнее здесь.

У вас небольшой бизнес, в котором работает менее 20 человек? Вы используете таблицы Google, но хотите перейти на более надежное ИТ-решение? Почему? Вы можете просто использовать Google Sheets в качестве базы данных для простого приложения CRUD (создание, запись, обновление и удаление). позвольте мне показать вам, как.

Установка

  • Перейдите в консоль Google API и создайте новый проект. Все, что вы хотите назвать.
  • Затем вы попадете в библиотеку API. Найдите листы Google и включите его. Пока вы это делаете, также включите API Google Диска.
  • На панели инструментов выберите меню «Гамбургер» и выберите IAM & Admin. Затем выберите «Учетная запись службы».
  • Нажмите «Создать учетную запись службы».
  • Назовите это как угодно. Скопируйте «электронную почту».
  • Когда вы закончите, вы увидите страницу, подобную этой. Нажмите на меню с тремя точками и выберите «Создать ключ». Выберите JSON.
  • Сохраните его в нужной папке как «client_secret.json».
  • Получите желаемый лист и сделайте копию. Поделитесь с электронной почтой, которую вы скопировали со страницы учетной записи службы.
  • Установите Питон 3.

Код

Вам понадобятся две внешние библиотеки gspread и oauth2client.

pip install gspread oauth2client

Создайте новый скрипт Python в той же папке, что и. Импортируйте полезные модули.

import gspread
from oauth2client.service_account import ServiceAccountCredentials

Теперь назначьте свои имена:

client_key = './client_secret.json'
scope = ['<https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive>']

Это важные вещи для клиентов OAuth 2.0. Не утруждайте себя пониманием этого, если только вы не стремитесь получить степень CS. Теперь пришло время авторизоваться.

cred =  ServiceAccountCredentials.from_json_keyfile_name(clientkey,scope)
client = gspread.authorize(cred)

Теперь вы можете открыть любую рабочую книгу и открыть любой лист из этой рабочей книги с помощью клиента gspread. В этом случае мы будем работать с копией Test.

workbook = client.open('copy of Test')

В этой рабочей тетради 3 листа. Вы можете получить к ним доступ.

#To get sheets named in the standard convention
sheet1 = workbook.sheet1
#To get sheets with custom names
gdp = workbook.worksheet('GDP')
#To get sheets all the worksheets as a list
all_worksheets = workbook.worksheets()

Все они будут возвращать объекты листа. Вы можете выполнять различные операции с этими листами в соответствии с Google API v4. Пока нас будут интересовать только ценности. На листе GDP есть все страны мира, отсортированные по ВВП. Чтобы получить значение ячейки (скажем, B2), мы можем использовать следующий код:

#Get value of a cell
gdp.acell('B2').value
#or
gdp.cell(2,2).value

Вывод:

'United States'

Чтобы получить значения строки, столбца или всего листа:

#Get Values of a Row
gdp.row_values(2)
#['1', 'United States', '21,439,453']
#Get Values of a Columns
gdp.col_values(2)
#['Country', 'United States', 'China[n 2]', 'Japan',...]
#Get all the values
gdp.get_all_records()
#[['Rank', 'Country', 'GDP(in millions)'], ['1', 'United States', '21,439,453'], ['2', 'China[n 2]', '14,140,163'],...]

Вы также можете получить причудливый тип данных «запись» для ваших значений, который представляет собой просто список словарей:

gdp.get_all_records()
#[{'Rank': 1, 'Country': 'United States', 'GDP(in millions)': '21,439,453'}, {'Rank': 2, 'Country': 'China[n 2]', 'GDP(in millions)': '14,140,163'}, {'Rank': 3, 'Country': 'Japan', 'GDP(in millions)': '5,154,475'}, {'Rank': 4, 'Country': 'Germany', 'GDP(in millions)': '3,863,344'}, {'Rank': 5, 'Country': 'India', 'GDP(in millions)': '2,935,570'}...]

Использование col_values ​​и row_values ​​может очень быстро исчерпать вашу квоту API. К счастью, у python есть понимание списка:

values = gdp.get_all_values()
records = gdp.get_all_get_all_records()
#Getting a row value is simple
row2 = values[2]
#Getting a column value requires a list comprehension
column2 = [row[1] for row in values]
#or
column2 = [i['Country'] for i in records]

Может получить любое значение столбца или строки, не запрашивая API Google Таблиц снова и снова.

Установка значения

Получение значения — это хорошо, но как насчет изменения значения. Для этого мы будем использовать Sheet1.

Предположим, я вижу, что значение количества сыра Бильбо Багина неверно.

sheet1.update('C2',25)

Это обновление ячейки C2 со значением 25.

Теперь я хочу добавить еще одну запись на лист:

sheet1.update('A4:D4',[['Steven Universe','Cheddar','15','At Homeworld']])

Сложность заключается в том, чтобы всегда помнить, что значение должно быть списком списков, даже если диапазон находится в одной строке.

Использование

Помимо автоматизации ввода данных через CRUD, вы можете:

  • Используйте Pandas для серьезного анализа данных.
  • Сопоставьте все свои данные из других источников, таких как электронная почта, данные о поставщиках, информация о клиентах и ​​т. д.
  • Создайте базовую CRM, используя Google Forms + Python.

И многие другие варианты. Так что получайте удовольствие, играйте и экономьте время и, возможно, даже деньги.