Smartsheet单元格链接对象未返回状态

时间:2018-09-19 18:33:12

标签: python smartsheet-api

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。”错误

3 个答案:

答案 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)

答案 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的结果。

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