2014-01-29 42 views
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"); 
} 

回答

0

剛剛發現我有重新發布代碼,不同的版本。現在一切正常。