Smartsheet 单元格 link 对象没有 return 状态

Smartsheet cell link object does not return a status

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 代码,它们是正确的。但是,当我将单元格 link 对象的属性设置为源单元格的属性时,我得到 cell_link.status = None。我仔细研究了智能表模块,发现 CellLinkStatus 应该只有 return 8 条可能的消息(OK、BROKEN、INACCESSIBLE、NOT_SHARED、BLOCKED、CIRCULAR、INVALID 或 DISABLED),即不是 None.这是没有意义的,因为所有必需的属性都已设置以便返回状态更新。是否有更新单元格 link 方法或我缺少的其他方法会触发 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)

这会导致 "Required object attribute(s) are missing from your request: cell.value." 错误

您还没有向服务器发送任何内容。您需要更新行。参见 https://github.com/smartsheet-samples/python-snippets/blob/04951c2ca8ae1a97386bdd3fa6e010f2845e1421/samples.py#L47

Michael,虽然我无法重现您的确切错误,但我确实让您的代码进行了一些小改动——在传递给 [=12 时,使数组的 new_row 成为数组的一部分=] 函数。

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 函数将接受 "Row object or an array of Row objects",但我 能够使用大批。我认为这是在 Python SDK 中实现 API 的结果。

让我知道以上代码是否解决了您的问题。它正在为我成功创建单元格链接。

抱歉,我之前没有看到这个。 CellLink 是一个特例,因为不仅 value 必须是 None,而且我们实际上必须在 JSON 构造中序列化一个 null,将 PUT 传递给 API。在 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