0
我的腳本執行得很好,並且在我從編輯器運行腳本時能夠從電子表格中返回數據,但當我嘗試使用cURL或Postman時它失敗。GAS - GET無法正常工作但POST確實
I am能夠發出POST來呼叫doPost(e)
並從給定的參數向我的電子表格添加額外的行。我希望能夠發出GET請求來調用我的doGet(e)
方法,該方法將我的電子表格的行作爲JSON返回(我驗證了doGet在編輯器中工作)。
然而,當我嘗試發出GET使用捲曲或郵差,我得到TypeError: Cannot call method "getRange" of null.
我很困惑,因爲我沒有在我的腳本中調用該方法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");
}