如何使用 Multi-Select 下拉值向 Smartsheet sheet 添加新行?
How to add a new row to Smartsheet sheet with Multi-Select Dropdown values?
我正在构建一个允许用户在 Smartsheetsheet 中创建新行的网络表单。在这个阶段它只是一个原型,但我 运行 遇到的一个障碍是提交请求,其中值用于多 select 下拉列表。
我已经尝试了几种方法
#Attemp 1
new_cell.value = value
new_row.cells.append(new_cell)
#Attemp 2
multival = smart.models.MultiPicklistObjectValue()
multival.values = value
new_cell.object_value = multival
new_row.cells.append(new_cell)
#Attempt 3
multival = smart.models.MultiPicklistObjectValue()
multival.values = np.asarray(value)
new_cell.object_value = multival
new_row.cells.append(new_cell)
然后是错误...
#Attempt 1 error: {"response": {"statusCode": 400, "reason": "Bad Request", "content": {"detail": {"index": 0}, "errorCode": 1012, "message": "Required object attribute(s) are missing from your request: cell.value.", "refId": "nbw0ymylrr19"}}}
#Attempt 2 error: {"response": {"statusCode": 400, "reason": "Bad Request", "content": {"errorCode": 5536, "message": "The value "com.navigo.smartsheet.rest.helper.sheet.cell.model.MultiPicklist@31b27800" could not be saved in column "Audience". This column is restricted to PICKLIST values only.", "refId": "71du6l0civ0y"}}}
#Attempt 3 error: ValueError: ("Can't load to TypedList(%s) from '%s'", <class 'str'>, array(['Clinicians', 'Chest pain committee'], dtype='<U20'))
尝试 3 甚至没有通过 multival.values 作业。
我看过很多关于更新行、查询 Smartsheet 的文档,但我没有看到很多关于 Multi-Select 值或添加新行的方法。有人解决了吗?或者有人知道我做错了什么吗?
我对 Smartsheet Python SDK 不是很熟悉,但似乎 SDK 的 GitHub 存储库中的集成测试代码可能会有所帮助。那里的 test_multi_picklist.py 文件包含似乎符合您的情况的代码:
def test_add_multi_picklist_row(self, smart_setup):
smart = smart_setup['smart']
mplov = smartsheet.models.MultiPicklistObjectValue({
'values': ['Bat', 'Cat']
})
insert_cell = smartsheet.models.Cell({
'column_id': smart_setup['multi_picklist_col_id'],
'object_value': mplov
})
row = smart.models.Row({
'to_top': True,
'cells': [insert_cell]
})
action = smart.Sheets.add_rows(smart_setup['sheet'].id, [row])
assert action.request_response.status_code == 200
** 更新 - 完整的概念证明 **
以下代码使用 Smartsheet Python SDK 将新行添加到 sheet(为简单起见,仅包含 2 个数据单元格),其中一个单元格属于 sheet.
中的 multi-select 下拉列表 列
# Initialize client.
# Uses the API token in the environment variable SMARTSHEET_ACCESS_TOKEN.
smart = smartsheet.Smartsheet()
# Define cell object (for the value in the first column)
cell1 = smart.models.Cell({
'column_id': 6101753539127172,
'object_value': 'new item'
})
# Define cell object (for the value in the second column - a multi-select dropdown)
cell2 = smart.models.Cell({
'column_id': 8436269809198980,
'object_value': smart.models.MultiPicklistObjectValue({'values': ['Blue', 'Green']})
})
# Create row that contains the 2 cells defined previously
row = smart.models.Row({
'cells': [cell1, cell2]
})
# Add row to sheet
sheetId = 3932034054809476
result = smart.Sheets.add_rows(sheetId, [row])
运行 此代码成功将以下行添加到我的 sheet(为 multi-select 下拉列指定 2 个值):
我正在构建一个允许用户在 Smartsheetsheet 中创建新行的网络表单。在这个阶段它只是一个原型,但我 运行 遇到的一个障碍是提交请求,其中值用于多 select 下拉列表。
我已经尝试了几种方法
#Attemp 1
new_cell.value = value
new_row.cells.append(new_cell)
#Attemp 2
multival = smart.models.MultiPicklistObjectValue()
multival.values = value
new_cell.object_value = multival
new_row.cells.append(new_cell)
#Attempt 3
multival = smart.models.MultiPicklistObjectValue()
multival.values = np.asarray(value)
new_cell.object_value = multival
new_row.cells.append(new_cell)
然后是错误...
#Attempt 1 error: {"response": {"statusCode": 400, "reason": "Bad Request", "content": {"detail": {"index": 0}, "errorCode": 1012, "message": "Required object attribute(s) are missing from your request: cell.value.", "refId": "nbw0ymylrr19"}}}
#Attempt 2 error: {"response": {"statusCode": 400, "reason": "Bad Request", "content": {"errorCode": 5536, "message": "The value "com.navigo.smartsheet.rest.helper.sheet.cell.model.MultiPicklist@31b27800" could not be saved in column "Audience". This column is restricted to PICKLIST values only.", "refId": "71du6l0civ0y"}}}
#Attempt 3 error: ValueError: ("Can't load to TypedList(%s) from '%s'", <class 'str'>, array(['Clinicians', 'Chest pain committee'], dtype='<U20'))
尝试 3 甚至没有通过 multival.values 作业。
我看过很多关于更新行、查询 Smartsheet 的文档,但我没有看到很多关于 Multi-Select 值或添加新行的方法。有人解决了吗?或者有人知道我做错了什么吗?
我对 Smartsheet Python SDK 不是很熟悉,但似乎 SDK 的 GitHub 存储库中的集成测试代码可能会有所帮助。那里的 test_multi_picklist.py 文件包含似乎符合您的情况的代码:
def test_add_multi_picklist_row(self, smart_setup):
smart = smart_setup['smart']
mplov = smartsheet.models.MultiPicklistObjectValue({
'values': ['Bat', 'Cat']
})
insert_cell = smartsheet.models.Cell({
'column_id': smart_setup['multi_picklist_col_id'],
'object_value': mplov
})
row = smart.models.Row({
'to_top': True,
'cells': [insert_cell]
})
action = smart.Sheets.add_rows(smart_setup['sheet'].id, [row])
assert action.request_response.status_code == 200
** 更新 - 完整的概念证明 **
以下代码使用 Smartsheet Python SDK 将新行添加到 sheet(为简单起见,仅包含 2 个数据单元格),其中一个单元格属于 sheet.
中的 multi-select 下拉列表 列# Initialize client.
# Uses the API token in the environment variable SMARTSHEET_ACCESS_TOKEN.
smart = smartsheet.Smartsheet()
# Define cell object (for the value in the first column)
cell1 = smart.models.Cell({
'column_id': 6101753539127172,
'object_value': 'new item'
})
# Define cell object (for the value in the second column - a multi-select dropdown)
cell2 = smart.models.Cell({
'column_id': 8436269809198980,
'object_value': smart.models.MultiPicklistObjectValue({'values': ['Blue', 'Green']})
})
# Create row that contains the 2 cells defined previously
row = smart.models.Row({
'cells': [cell1, cell2]
})
# Add row to sheet
sheetId = 3932034054809476
result = smart.Sheets.add_rows(sheetId, [row])
运行 此代码成功将以下行添加到我的 sheet(为 multi-select 下拉列指定 2 个值):