我正在尝试将两个值和显示格式都写入智能表。我通过以下方式访问工作表:
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中?如果是,我该如何访问它?如果不是,那么使用requests
和json
包构建请求的最佳方法是什么?
答案 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])