如何使用 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 个值):