我的脚本执行正常,当我从编辑器运行脚本时能够从我的电子表格中返回数据,但是当我尝试使用cURL或Postman时它会失败。
我我能够发出POST来调用doPost(e)
并从给定参数向我的电子表格添加额外的行。我希望能够发出一个GET请求来调用我的doGet(e)
方法,该方法将我的电子表格行返回为JSON(我验证了doGet在编辑器中的工作原理)。
但是,当我尝试使用cURL或Postman发出GET时,我得TypeError: Cannot call method "getRange" of null.
我很困惑,因为我没有在我的脚本中的 all 处调用方法getRange()
,所以我不知道这个错误来自哪里。我将Spreadsheet键和工作表名称硬编码到脚本中进行测试,但仍然会出现同样的错误。
我已部署了该网络应用,以便使用我的Google帐户执行,并允许Anyone, even anonymous
访问该脚本。我运行了一个设置功能,用脚本授权我的帐户。
这是我的电子表格中的link。
这是我的代码:
function doGet(e) {
var ss = SpreadsheetApp.openById("0AvXqpv9dPoVfdHRzRUkxMS1qVkpwaEJDSk44RXpZUVE");
var sheet = ss.getSheetByName("Clouds");
var rows = sheet.getDataRange();
var numRows = rows.getNumRows();
var values = rows.getValues();
var json = JSON.stringify(values);
Logger.log(json);
return json;
};
function doPost(e) {
var ss = SpreadsheetApp.openById("0AvXqpv9dPoVfdHRzRUkxMS1qVkpwaEJDSk44RXpZUVE");
//var sheet = ss.getSheetByName(e.parameter["sheetID"]);
var sheet = ss.getSheetByName("Clouds");
//Logger.log("sheetId: " + e.parameter["sheetID"]);
Logger.log("request: " + e);
//check if sheet exists, if not add sheet
if (sheet == null) {
Logger.log("Creating new sheet...");
//inserts sheet with specified ID, updates sheet var, appends a header row and then locks it
ss.insertSheet(e.parameter["sheetID"]);
sheet = ss.getSheetByName(e.parameter["sheetID"]);
sheet.appendRow(["ID","Coverage","Date", "Time", "Comments", "kWhr", "mL Water"]);
sheet.setFrozenRows(1);
}
//Append the 3 inputs to the sheet
//If statement takes care of whether the user is using the GET or POST functions, GET will have different parameter id's
if (e == null || e.parameter["id"] == undefined){
Logger.log("getting data");
return ContentService.createTextOutput("Successful GET");
//doPost(e);
}
else {
Logger.log("Appending row...");
sheet.appendRow([
e.parameter["id"],
e.parameter["coverage"],
e.parameter["date"],
e.parameter["time"],
e.parameter["comments"],
e.parameter["kwhr"],
e.parameter["ml"]
]);
}
//Returns a string to be displayed (If nothing is return you get a Google page saying the script worked and nothing was returned)
return ContentService.createTextOutput("Successfully Submitted. You may close the application");
}
答案 0 :(得分:0)
刚刚发现我必须将代码重新发布为不同的版本。现在一切正常。