Smartsheet CHECKBOX 单元格始终返回为空

Smartsheet CHECKBOX Cells Always Returned as Empty

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

如果单元格从未设置过任何值,则该单元格的值可能为空(例如,如果您向新行中的单元格添加值,则所有其他单元格都将为空)。我猜这就是你所看到的。

如果您选中其中一个复选框单元格,保存,然后取消选中它,您应该会在 API.

中看到它的值为 false

出于程序逻辑的目的,您可以将任何空复选框单元格视为未选中。

我相信您发现了 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
    },
    ...
  ]
}

在上面的示例响应中,单元格包含一个选中的复选框 (value=true)。所以 API 本身表现正常。

但是,如果我使用 Smartsheet Python SDK 检查完全相同的单元格,value 属性被错误地设置为 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

行号:

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 似乎没有为复选框列(或像 "Star" 这样的符号列正确设置 value表现得像复选框列)。我建议您记录此问题 here, so that Smartsheet is aware and can address it. If you're able to fix the issue locally (i.e., by modifying your local copy of the smartsheet-python-sdk package), then you can also submit a pull request.

在smartsheet库的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