每当我检索SmartSheet行并遍历其中的单元格时,无论工作表上的复选框的状态如何,所有CHECKBOX类型的单元格都始终具有displayValue或Null值。还有其他人经历过这个吗? (我正在使用他们的python sdk)
答案 0 :(得分:2)
我相信您发现了Python SDK的错误。
Kevin的回答正确描述了API本身的行为,正如我通过以下请求/响应验证(使用Postman)。
获取行 - 请求:
GET https://api.smartsheet.com/2.0/sheets/7359436428732292/rows/863888846677892
获取行 - 响应:
{
"id": 863888846677892,
"sheetId": 7359436428732292,
"rowNumber": 1,
"version": 88,
"expanded": true,
"accessLevel": "OWNER",
"createdAt": "2016-07-06T22:21:58Z",
"modifiedAt": "2016-07-27T01:50:46Z",
"cells": [
{
"columnId": 4509804229093252,
"value": true
},
...
]
}
在上面的示例响应中,单元格包含一个选中的复选框(值 = true)。所以API本身表现得很好。
但是,如果我使用Smartsheet Python SDK检查完全相同的单元格,则值属性会被错误地设置为 null :
Python代码:
import os
import smartsheet
os.environ['SMARTSHEET_ACCESS_TOKEN'] = 'MY_TOKEN_VALUE'
smartsheet = smartsheet.Smartsheet()
# get sheet
sheet = smartsheet.Sheets.get_sheet(7359436428732292)
print('SheetId:\n' + str(sheet.id) + '\n')
print('RowId:\n' + str(sheet.rows[0].id) + '\n')
print('ColumnId (for the checkbox column):\n' + str(sheet.columns[0].id) + '\n')
print('Column object (for the checkbox column):\n' + str(sheet.columns[0]) + '\n')
print('Cell that contains a selected Checkbox:\n' + str(sheet.rows[0].cells[0]))
此代码生成以下输出:
SheetId:
7359436428732292
RowId的:
863888846677892
ColumnId(对于复选框列):
4509804229093252
列对象(对于复选框列):
{"index": 0, "locked": null, "systemColumnType": null, "autoNumberFormat": null, "symbol": null, "format": null, "primary": null, "options": [], "filter": null, "width": 75, "lockedForUser": null, "title": "CBcol", "hidden": null, "type": "CHECKBOX", "id": 4509804229093252, "tags": []}
包含所选复选框的单元格:
{"format": null, "displayValue": null, "linksOutToCells": null, "columnType": null, "columnId": 4509804229093252, "hyperlink": null, "value": null, "conditionalFormat": null, "strict": true, "formula": null, "linkInFromCell": null}
所以,遗憾的是,似乎Python SDK没有为Checkbox列正确设置值(或者像“Star”这样的符号列,其行为类似于复选框列)。我建议您记录此问题here,以便Smartsheet知道并可以解决它。如果您能够在本地解决问题(例如,通过修改 smartsheet-python-sdk 包的本地副本),那么您还可以提交pull request。
答案 1 :(得分:0)
如果单元格从未设置任何值,则任何单元格的值都可以为null(例如,如果向新行中的单元格添加值,则所有其他单元格将为null)。我猜这就是你所看到的。
如果您选中其中一个复选框,请保存,然后取消选中,您应该在API中看到其值为false
。
出于程序逻辑的目的,您可以将任何空复选框单元视为未选中。
答案 2 :(得分:0)
在智能表库的cell.py文件中,替换旧的:
@value.setter
def value(self, value):
if isinstance(value, six.string_types):
self._value = value
使用:
@value.setter
def value(self, value):
if isinstance(value, six.string_types) or value is True:
self._value = value