Что такое 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)))
     )

В результате этого блока кода мы получим это:

c15de1dc7f0188b3df3a7cf102f95b32.png

Детально расписывать каждую строку не будем, остановлюсь на главных моментах. На уровне юзер мы можем работать с файловой системой в гугл диске (подробнее далее). На уровне таблицы, мы можем делать практически все с текстом и ячейками. Чтобы открыть таблицу нужно записать ее индикатор ('{spreadsheet_id}'), который находится в ссылке между spreadsheets/d/ и /edit#gid=...

При выборе страницы мы автоматически выбираем все строки и все столбцы. Для выделения области поменьше мы можем использовать стандартное текстовое выделение 'B3: C', либо использовать список из четырех чисел («строка», «столбец», «строка», «столбец»), где None будет выступать последней строкой или столбцом.

Все точные параметры так или иначе уже вписаны в библиотеку, чтобы узнать какой объект вам нужен, можно просто перейти к функцие и посмотреть тип данных. Пример:

2ae30ca6746e5d8e746d09ec01bf1568.png

Теперь создадим табличку и запишем ее в гугл таблицу

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)
     )

b73499dd80b4dfe5b7c9093c9d110e64.png

Теперь нарисуем графики

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))
     )

30ff37cf07a803feca08bc8ce06ff755.png

И еще один комбинированный

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')
     )

ce00fdbdd0aa45c0654fa49b4b26aa33.png

Теперь создадим папку и поместим туда наш файл

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)

cbf47b85d00bcc7f47039a2b92d27366.png

Если папка уже создана, тогда folder_id будет идентификатором, который находится в ссылке после https://drive.google.com/drive/folders/

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

© Habrahabr.ru