Обновление формата ячейки с помощью Smartsheet API (Python SDK)

Я пытаюсь записать оба значения и отобразить форматирование в smartsheet. Я получаю доступ к листу с помощью:

import os
import re
import logging
import smartsheet
file_pssw = open('path2accesstoken/smsht.txt','r')
aux = file_pssw.readlines()
access_token = re.findall(r"'(.*?)'", aux[0].strip())[0]
#ID of your sheet to update
sheet_id = XXXXXXXXXXXXXXXX
# Initialize client
ss = smartsheet.Smartsheet(access_token)
# Load entire sheet
sheet = ss.Sheets.get_sheet(sheet_id, include=['format'],page_size=206)

Затем я могу получить доступ к формату конкретной ячейки с

In[45]: sheet.rows[48].cells[3].format
Out[45]: ',,,,,,,,,22,,,,,,'    

Согласно документации API Smartsheet и исходному коду Python SDK, следующий код должен успешно изменить форматирование этой ячейки (он по крайней мере делает успешный запрос PUT):

In[46]: sheet.rows[48].cells[3].format = ',,,,,,,,,22,,,,,3,'
        result = ss.Sheets.update_rows(sheet_id, [sheet.rows[48]])

Тем не менее, если я затем перезагрузить лист и проверить форматирование этой ячейки:

In[47]: sheet = ss.Sheets.get_sheet(sheet_id, include ['format'],page_size=206)
        sheet.rows[48].cells[3].format
Out[47]: ',,,,,,,,,22,,,,,,'

Форматирование ячейки не изменяется (это подтверждается проверкой листа через пользовательский интерфейс).

Эта функциональность не включена в Python SDK? Если это так, как я могу получить к нему доступ? Если это не так, это лучший подход к использованию requests и json пакет для построения запроса?

1 ответ

Решение

Это адаптировано из примера "Обновить строки" в документах, чтобы включить атрибут формата. Важно отметить, что для обновления форматирования ячейки необходимо также включить атрибут value. Вы захотите использовать текущее значение ячейки, если не хотите его менять.

Обратите внимание, что при построении формата объекта ячейки предшествует подчеркивание. Я должен также указать, что в этом процессе я создаю НОВЫЙ объект ячейки и НОВЫЙ объект строки для запроса, а не изменяю любые существующие объекты.

# Build new cell value

new_cell = ss_client.models.Cell()
new_cell.column_id = <COLUMN_ID>
new_cell.value = 2
new_cell._format = ",,,,,,,,27,,,,,,,"

# Build the row to update

new_row = ss_client.models.Row()
new_row.id = <ROW_ID>
new_row.cells.append(new_cell)

# Update rows

updated_row = ss_client.Sheets.update_rows(
<SHEET_ID>, # sheet_id
[new_row])
Другие вопросы по тегам