使用smartsheet-python-SDK写入多选列表列时遇cell.value缺失错误
问题分析
你遇到的errorCode 1012错误,核心原因是多选列表(multi-picklist)列的单元格值格式要求为数组,但你当前传入的是单个字符串值;同时直接复用从Sheet拉取的row对象时,可能包含了部分没有value属性的单元格(比如未设置值的多选列单元格),导致API请求被判定为缺少必填属性。
解决方案
- 修正值的格式:多选列的单元格值必须是数组类型,哪怕只选一个选项,也要用
['选项值']的格式。 - 仅更新目标单元格:不要直接修改从API获取的完整
row对象并提交,而是构造只包含需要更新的单元格的Row对象,避免携带无效的空单元格数据。
修改后的代码示例
workspace_name = 'API TEST' sheet_name = 'test sheet' lookup_value = 'b' # 多选列值改为数组格式 write_value = ['A'] write_column = 'first column' lookup_column = 'multi picklist' smart = init_smartsheet() sheet_data, sheet_id = init_sheet(workspace_name, sheet_name, client) write_column_id = sheet_data.get_column_by_title(write_column).id_ lookup_column_id = sheet_data.get_column_by_title(lookup_column).id_ target_row_id = None # 只获取目标行的ID即可,无需拉取完整row对象 for row in sheet_data.rows: for cell in row.cells: if cell.column_id == lookup_column_id and cell.value == lookup_value: target_row_id = row.id_ break if target_row_id: break # 构造仅包含需更新单元格的Row对象 from smartsheet.models import Row, Cell updated_row = Row() updated_row.id_ = target_row_id # 写入普通列 write_cell = Cell() write_cell.column_id = write_column_id write_cell.value = write_value[0] # 普通列用单个值 updated_row.cells.append(write_cell) # 如果是要更新多选列,示例如下: # multi_pick_cell = Cell() # multi_pick_cell.column_id = lookup_column_id # multi_pick_cell.value = ['A', 'C'] # 多选列用数组 # updated_row.cells.append(multi_pick_cell) # 提交更新 smart.Sheets.update_rows(sheet_id, [updated_row])
关键说明
- 多选列的
cell.value必须是字符串数组,比如['选项1', '选项2'],不能是单个字符串。 - 提交更新时,只包含需要修改的单元格,不要复用从Sheet读取的完整行对象,避免因其他单元格缺少
value属性导致请求失败。
内容的提问来源于stack exchange,提问作者Daan
相关产品推荐
相关产品推荐

