Что такое SpeedTab и как им пользоватся
В прошлой публикации я показывал как сделать токен для Google API и упомянул свою библиотеку как пример, где такой токен нужен. Вот прямая ссылка.
SpeedTab это обертка на API от гугла, который позволяет работать и редактировать гугл таблицы. Библиотека также включает минимальный функционал для работы с гугл диском.
В этой публикации я покажу как использовать библиотеку SpeedTab на нескольких примерах.
import speedtab as st
with st.Client('token2.json') as user:
table1 = user.create_spreadsheet(title='My test Spreadsheet', sheets=['One', 'Two'], hide_grid_lines=False)
Для начала создадим пустую таблицу.
import speedtab as st
with st.Client('token2.json') as user:
# table1 = user.create_spreadsheet(title='My test Spreadsheet', sheets=['One', 'Two'], hide_grid_lines=False)
table1 = user.get_spreadsheet('{spreadsheet_id}')
table1.sheet('One').clear().cell_range((2, 1, 21, 2)).set_borders()
(table1.sheet('One').cell_range('B3').write_range([[1, 2, 3], ['Text1', 'Text2', 'Text3']])
.cell_range('B3:D3').set_background_color(st.DefaultColors.DARK_BLUE2).set_borders()
.set_text_format(text_color=st.Color((255, 255, 255)), bold=True,
vertical_alignment=st.VerticalAlignment.TOP,
horizontal_alignment=st.HorizontalAlignment.CENTER)
.cell_range((2, 1, 2, 1)).set_num_format(st.ReadyFormats.DECIMAL_PERCENT)
.cell_range((2, 2, 2, 2)).set_num_format(st.Dollar('$#,##0.00'))
.cell_range((3, 1, 4, 2)).set_background_color(st.Color('#ffd966'))
.set_text_format(italic=True, font_size=16, font_family='Lexend')
.set_borders(border_style=st.BorderStyle.DOUBLE, border_sides=st.BorderSides.OUTER_BORDERS, color=st.Color((55, 145, 200)))
)
В результате этого блока кода мы получим это:
Детально расписывать каждую строку не будем, остановлюсь на главных моментах. На уровне юзер мы можем работать с файловой системой в гугл диске (подробнее далее). На уровне таблицы, мы можем делать практически все с текстом и ячейками. Чтобы открыть таблицу нужно записать ее индикатор ('{spreadsheet_id}'), который находится в ссылке между spreadsheets/d/
и /edit#gid=...
При выборе страницы мы автоматически выбираем все строки и все столбцы. Для выделения области поменьше мы можем использовать стандартное текстовое выделение 'B3: C', либо использовать список из четырех чисел («строка», «столбец», «строка», «столбец»), где None будет выступать последней строкой или столбцом.
Все точные параметры так или иначе уже вписаны в библиотеку, чтобы узнать какой объект вам нужен, можно просто перейти к функцие и посмотреть тип данных. Пример:
Теперь создадим табличку и запишем ее в гугл таблицу
import speedtab as st
import pandas as pd
import random
df = pd.DataFrame({'month': range(202301, 202311),
'amount': random.sample(range(500, 2000), 10),
'percent': [random.uniform(0, 0.5) for _ in range(10)]})
with st.Client('token2.json') as user:
table1 = user.get_spreadsheet('{spreadsheet_id}')
(table1.sheet('Two')
.cell_range((2, 2, 2, df.shape[1] + 1)).write_dataframe(df, index=False).set_borders()
.set_text_format(text_color=st.Color((255, 255, 255)), font_size=18)
.set_background_color(color=st.Color('#765252'))
.cell_range((2, 2, 2 + df.shape[0], df.shape[1] + 1))
.set_borders(border_sides=[st.BorderSides.OUTER_BORDERS, st.BorderSides.VERTICAL_BORDER])
.cell_range('D:D').set_num_format(st.ReadyFormats.PRETTY_DOLLAR)
.cell_range('E:E').set_num_format(st.ReadyFormats.DECIMAL_PERCENT)
)
Теперь нарисуем графики
with st.Client('token2.json') as user:
table1 = user.get_spreadsheet('{spreadsheet_id}')
(table1.sheet('Two').cell_range('B16')
.add_chart(columns=[1], chart_type=st.ChartType.COLUMN, title='Income', data_start='C3')
.cell_range('H3')
.add_chart(columns=[2], target_axis=st.AxisPosition.RIGHT_AXIS,
chart_type=st.ChartType.LINE, title='New Customers', data_start=(3, 3))
)
И еще один комбинированный
with st.Client('token2.json') as user:
table1 = user.get_spreadsheet('1NFLoAyy52HaNyBv6V7P_OOag_1fsKmQ5xY2p6K_4uQY')
(table1.sheet('One').cell_range('G3')
.add_combo_chart(
left_columns=[1], right_columns=[2], chart_type_left=st.ChartType.COLUMN,
chart_type_right=st.ChartType.LINE, title='Overall', legend_position=st.LegendPosition.RIGHT_LEGEND,
data_sheet_name='Two', data_start='C3')
)
Теперь создадим папку и поместим туда наш файл
with st.Client('token2.json') as user:
folder_id = user.create_folder('My reports')
table1 = user.get_spreadsheet('1NFLoAyy52HaNyBv6V7P_OOag_1fsKmQ5xY2p6K_4uQY')
user.move_spreadsheet_to_folder(table1, folder_id)
Если папка уже создана, тогда folder_id
будет идентификатором, который находится в ссылке после https://drive.google.com/drive/folders/
Отлично. мы создали, отредактировали и переместили гугл таблицу используя библиотеку обертку SpeedTab.