我的脚本执行良好,当我从编辑器运行脚本时,它能够从电子表格返回数据,但是当我尝试使用cURL或Postman时,它失败了。
我am能够发出一个帖子来调用doPost(e),并从给定的参数向我的电子表格中添加一个额外的行。我希望能够发出一个GET请求来调用我的doGet(e)方法,该方法以JSON的形式返回电子表格中的行(我验证了doGet在编辑器中工作)。
但是,当我尝试使用cURL或Postman发出GET时,我得到了TypeError: Cannot call method "getRange" of null.
我很困惑,因为我在脚本中根本没有调用getRange()方法,所以我不知道这个错误是从哪里来的。我将电子表格键和工作表名称硬编码到脚本中进行测试,但仍然得到相同的错误。
我已经部署了网络应用程序,以便它执行与我的谷歌帐户,我允许Anyone, even anonymous访问脚本。我已经运行了一个安装函数来使用脚本授权我的帐户。
这是我的电子表格的链接。
这是我的密码:
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");
}发布于 2014-01-30 06:09:20
刚刚发现我必须将代码重新发布为不同的版本。现在一切都正常了。
https://stackoverflow.com/questions/21445194
复制相似问题