Python 使用 Smartsheet API 无需 SDK 即可更新 Cell 值

问题描述 投票:0回答:2

我一直在使用 Smarthseets API 尝试创建一个可以读取工作表并更新其单元格的脚本。我已经能够使用以下脚本阅读该表。在 IF 语句内,它检查某个列标题并读取单元格中的值,

import requests
import json

Test = "SHEET_ID"

url = "https://api.smartsheet.com/2.0/sheets/"+Test
Header = {
    'Authorization': "Bearer AUTH_TOKEN",
    'Content-Type': "application/json"
    }
response = requests.request("GET",url,headers=Header)
if response.status_code == 200:
    SheetInfo = json.loads(response.text)
    for column in SheetInfo["columns"]:
        if column["title"] == "Tracking #":
            TrackingNumberColumnID = column["id"]
    for row in SheetInfo["rows"]:
        for cell in row["cells"]:
            if cell["columnId"] == TrackingNumberColumnID:
                numberlist.append(cell["displayValue"])
for number in numberlist:
    print(number)

看到这个工作让我知道在没有 SDK 的情况下使用 SmartSheets API 是可能的,然后我尝试非常简单地使用 SmartSheets API 文档中的 Get Rows

方法

其代码如下所示


import requests
Test = "SHEET_ID"
row = "ROW_ID"
url = "https://api.smartsheet.com/2.0/sheets/"+Test+"/rows/"+row
Header = {
    'Authorization': "Bearer AUTH_TOKEN"
    }
response = requests.request("GET",url,headers=Header)
print(response.text)

运行此脚本时,生成的响应会在其 JSON 中给出状态代码 404 和以下内容

{
  "errorCode" : 1006,
  "message" : "Not Found",
  "refId" : "o7wsk0qea9ct"
}

任何有关如何正确格式化获取行请求的帮助将不胜感激。使用获取行请求的最终目标是使用更新行请求对工作表进行更改

python python-requests smartsheet-api
2个回答
0
投票
您所描述的场景中的

404

 响应代码表明您使用的 URL 无效。我怀疑您为工作表 Id 指定的值(即代码中 
Test
 变量的内容)无效,或者您为行 Id 指定的值(即 
的内容)代码中的 row
 变量)是有效的——或者这两个值可能都是无效的。

要排除故障,请尝试添加一条打印语句来打印 URL,然后验证该 URL 的结构是否正确,以及它为工作表 Id 和行 Id 指定的值是否有效(即,与您在之前的

Get Sheet

 回复)。

这是一些示例代码,其中包含我所描述的打印语句:

sheetId = '3932034054809476' rowId = '5225480965908356' url = 'https://api.smartsheet.com/2.0/sheets/' + sheetId + '/rows/' + rowId print('Request URL: ' + url) header = { 'Authorization': 'Bearer ' + os.environ['SMARTSHEET_ACCESS_TOKEN'] } response = requests.request('GET', url, headers=header) print(response.text)
URL 应如下所示 - 仅包含工作表 Id 和行 Id 的值:

https://api.smartsheet.com/2.0/sheets/3932034054809476/rows/5225480965908356


更新 - 如何识别工作表 ID

添加此附加信息是为了回应您下面有关工作表 ID 的评论。使用 Smartsheet API 时,切勿使用 Smartsheet 应用程序内的 URL 中显示的 ID 值。从技术上讲,应用内 URL 中的 ID 可用于

GET Sheet

 请求,但无法通过 API 处理其他任何请求。相反,在使用 API 时,请始终使用分配给 Smartsheet 中每个对象的唯一数字 ID 值(例如,类似于 
5225480965908356
 的值)。您可以通过在 Smartsheet 应用程序中打开工作表,然后从 
File 菜单中选择 Properties 来查找工作表的 ID。

下面的屏幕截图显示了包含工作表 ID 的工作表属性对话框窗口。获得此 ID 后,您可以使用它发出

GET Sheet

 API 请求,并从该响应中获取您需要的任何其他 ID。

Smartsheet Sheet Properties dialog


0
投票
您可以通过调用

GET https://api.smartsheet.com/2.0/home端点来查找sheetID。

© www.soinside.com 2019 - 2024. All rights reserved.