ss_client = SmartCap.SMARTSHEET.get_client(self)
cell_link = ss_client.models.CellLink()
cell_link.sheet_id = int(source_sheet_id)
cell_link.sheet_name = source_sheet_name
cell_link.row_id = int(source_row_id)
cell_link.column_id = int(source_col_id)
print(cell_link.status)
上面是我的代码的简化版本。我已经使用get_cell_history()方法检查了所有源ID代码,它们是正确的。但是,当我将单元格链接对象的属性设置为源单元格的属性时,会得到cell_link.status = None。我对智能表模块进行了一些挖掘,发现CellLinkStatus应该只返回8条可能的消息(确定,损坏,无法访问,不可共享,已阻止,圆形,无效或禁用),即不是无。这没有意义,因为设置了所有必需的属性以获取状态更新。是否有一个更新单元链接方法或我遗漏的其他东西会触发cell_link.status的@setter方法?
编辑:添加其余代码
new_cell = ss_client.models.Cell()
new_cell.value = None
new_cell.link_in_from_cell = cell_link
new_cell.column_id = dest_column_id
new_row = ss_client.models.Row()
new_row.id = dest_row_id
new_row.cells.append(new_cell)
result = ss_client.Sheets.update_rows(dest_sheet_id, new_row)
这将导致“请求中缺少必需的对象属性:cell.value。”错误
答案 0 :(得分:1)
对不起,我之前没有看到。 CellLink是一种特殊情况,因为不仅value
必须为None
,而且实际上我们必须在将PUT插入API的JSON构造中序列化null。在Python SDK中,有一个ExplicitNull模型,该模型使序列化程序执行此操作(序列化null / None)。在大多数情况下,任何没有值的属性都只会在序列化过程中被丢弃。
这是来自测试代码的示例:
sheet_b = smart_setup['sheet_b']
cell_link = smart.models.CellLink()
cell_link.sheet_id = sheet_b.id
cell_link.row_id = sheet_b.rows[0].id
cell_link.column_id = sheet_b.columns[0].id
cell = smart.models.Cell()
cell.column_id = col_id
cell.link_in_from_cell = cell_link
cell.value = smart.models.ExplicitNull()
row = smart.models.Row()
row.id = added_row.id
row.cells.append(cell)
action = smart.Sheets.update_rows(sheet.id, [row])
assert action.request_response.status_code == 200
答案 1 :(得分:0)
您还没有发送任何东西到服务器。您需要更新行。参见https://github.com/smartsheet-samples/python-snippets/blob/04951c2ca8ae1a97386bdd3fa6e010f2845e1421/samples.py#L47
答案 2 :(得分:0)
Michael,尽管我无法复制您的确切错误,但是我确实让您的代码可以进行较小的更改-将new_row
传递给update_rows
时使其成为数组的一部分功能。
cell_link = ss_client.models.CellLink()
cell_link.sheet_id = int(source_sheet_id)
cell_link.row_id = int(source_row_id)
cell_link.column_id = int(source_col_id)
new_cell = ss_client.models.Cell()
new_cell.value = None
new_cell.link_in_from_cell = cell_link
new_cell.column_id = dest_column_id
new_row = ss_client.models.Row()
new_row.id = dest_row_id
new_row.cells.append(new_cell)
result = ss_client.Sheets.update_rows(dest_sheet_id, [new_row])
尽管Update Row docs表示update_row
函数将接受“行对象或行对象数组”,但我仅能够使其与数组。我认为这是在Python SDK中实现API的结果。
让我知道上面的代码是否可以解决您的问题。它为我成功创建了单元链接。