在Google Apps脚本中使用智能表API添加行

时间:2017-05-12 21:37:57

标签: json google-apps-script smartsheet-api

我遇到与用户相同的困难:this link中的所有问题 - 当我提交以下请求添加一行时,我收到以下错误。

{“errorCode”:1008,“message”:“无法解析请求。发生以下错误:请求正文必须是JSON对象或JSON数组。”}

我相信数据格式正确,我已在jsonformatter.curiousconcept.com验证它是有效的JSON。

var params = {  
   "headers":{  
      "authorization":"Bearer <<removed for public posting>>"
   },
   "contentType":"application/json",
   "method":"PUT",
   "body":[  
      {  
         "toBottom":true,
         "cells":[  
            {  
               "columnId":4209581015492484,
               "value":"New row"
            }
         ]
      }
   ]
}
var response = UrlFetchApp.fetch("https://api.smartsheet.com/2.0/sheets/<<sheet key removed>>/rows", params)

提供给它的好处的答案是问题是由于API 1.1端点的错误而2.0将解决它。但是,我正在使用API​​ 2.0端点并仍然收到错误。

如果有人可以帮助解决这个谜题,我将非常感激!

2 个答案:

答案 0 :(得分:1)

使用PostmanChrome Advanced Rest ClientcUrl等交互式工具进行测试要容易得多。我不确定你的脚本实际上是通过网络发送的。

几点意见

UrlFetch docs示例包括从JS对象到JSON字符串的显式转换:

var data = { ... }

var params = {
    'method' : 'post',
    'contentType': 'application/json',
    // Convert the JavaScript object to a JSON string.
    'payload' : JSON.stringify(data)
};

另请注意,在设置params.payload

时,示例集params.body

此外,PUT /sheets/{sheetId}/rows用于更新一个或多个现有行。因此,有效负载中的每个行对象都需要行Id。请参阅docs中的示例 或者,您可以POST添加新行。

答案 1 :(得分:0)

这是一个完整的例子:

function addRow(){
var url ="https://api.smartsheet.com/2.0/sheets/5670346721388420/rows";

var data ={
        "toBottom": true,
        "cells": [
            {
                "value": "New data",
                "columnId": 5759377954105220
            }
        ]
    };

var options ={
        "headers": {
            "authorization": "Bearer ll352u9jujauoqz4fstvsae05"
        },
        "method": "post",
        "contentType": "application/json",
        "payload": JSON.stringify(data)
    };
Logger.log("About to call: " + url);

var response = UrlFetchApp.fetch(url, options);

Logger.log("Response: " + response);
}