Python 使用 Smartsheet API 在没有 SDK 的情况下更新单元格值

Python using Smartsheet API to update Cell value without SDK

我一直在使用 Smarthseets API 尝试创建一个可以读取 sheet 并更新其单元格的脚本。我已经能够使用以下脚本阅读 sheet。在 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 是可能的,然后我尝试非常简单地使用 Get Rows 方法 SmartSheets API Documentation

其代码如下所示


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"
}

如能提供有关如何正确格式化获取行请求的任何帮助,我们将不胜感激。使用获取行请求的最终目标是使用 update rows request 对 sheet

进行更改

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

要排除故障,请尝试添加一个打印语句来打印出 URL -- 然后验证 URL 的结构看起来是否正确以及它为 sheet 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 应该看起来像这样——只有 sheet 的 sheet ID 和行 ID 值:

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

更新 - 如何识别 Sheet ID

添加此附加信息以回应您在下方关于 Sheet ID 的评论。使用 Smartsheet API 时,切勿使用 Smartsheet 应用程序中出现在 URL 中的 ID 值。来自 URL in-app 的 ID 在技术上将适用于 GET Sheet 请求——但它不适用于通过 API 的任何其他请求。相反,当使用 API 时,始终使用分配给 Smartsheet 中每个对象的唯一数字 ID 值(例如,类似于 5225480965908356 的值)。您可以通过在 Smartsheet 应用程序中打开 sheet,然后从 中选择 Properties 来找到 Sheet 的 ID文件 菜单。

下面的屏幕截图显示了包含 Sheet ID 的 sheet 属性对话框 window。获得此 ID 后,您可以使用它发出 GET Sheet API 请求,并从该响应中获取您需要的任何其他 ID。