使用Smartsheet API(Python SDK)更新单元格格式

时间:2018-01-11 22:16:24

标签: python smartsheet-api

我正在尝试将两个值和显示格式都写入智能表。我通过以下方式访问工作表:

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

根据Smartsheet API文档和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,,,,,,'

单元格格式未更改(通过UI检查工作表可确认。)

此功能是否未包含在Python SDK中?如果是,我该如何访问它?如果不是,那么使用requestsjson包构建请求的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

这是根据docs中的Update Rows示例改编的,以包含format属性。请务必注意,要更新单元格的格式,您还必须包含value属性。如果您不想更改,则需要使用单元格的当前值。

请注意,构建单元格对象格式时,前面有下划线。我还应该指出,在这个过程中,我正在为请求构建一个NEW单元对象和一个NEW行对象,而不是修改任何现有对象。

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