Smartsheet CHECKBOX单元格始终返回为空

时间:2016-07-26 15:44:41

标签: python smartsheet-api

每当我检索SmartSheet行并遍历其中的单元格时,无论工作表上的复选框的状态如何,所有CHECKBOX类型的单元格都始终具有displayValue或Null值。还有其他人经历过这个吗? (我正在使用他们的python sdk)

3 个答案:

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