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