2013-07-24 31 views
0

我設置了一個Google表單,提交一封帶有「批准」或「拒絕」的電子郵件。一旦在電子郵件中點擊任一按鈕,它應該進入電子表格中的字段。相反,我收到以下錯誤: 找不到方法(類)(類)getRange((類),數量)找不到方法(class)(class)getRange((class),number)Google表單上的錯誤

var ss = SpreadsheetApp.openById('0AgiQ-iVBgD0HdDd3Xzh2aXJVRmRjQkI5dmhkd0pSMnc'); 
var sheet = ss.getSheets()[0]; 
var lastRowNum = sheet.getLastRow(); 
var range = "A1:A"+lastRowNum; 
var allResponseIDs = sheet.getRange(1, 1, lastRowNum, 1); 
var cellValues = allResponseIDs.getValues(); 
var year = e.year; 
var month = e.month; 
var day = e["day-of-month"]; 
var today = month+'/'+day+'/'+year; 

for(var i = 1; i <= lastRowNum; i++) { 
if(cellValues[i] === responseID) { 
    var rowNumber = i; 
} 
} 

var preApproved = sheet.getRange(rowNumber, 14, 1, 1); 

if (!preApproved) { 
    // Set the 1st level approval 
    if (approvalOne === 'true') { 
    sheet.getRange(rowNumber, 14, 1, 1).setValue(true); 
    } else { 
    sheet.getRange(rowNumber, 14, 1, 1).setValue(false); 
    } 
    sheet.getRange(rowNumber, 15, 1, 1).setValue(today); 

有什麼建議?

+0

代碼中有很多'getRange()'調用。你能找出哪些是造成問題的原因嗎?您可以使用調試模式,或者如果代碼在觸發器內運行,則可以使用Logger功能來了解哪些調用正在抱怨 – Srik

回答

0

問題是當rowNumber可能沒有被定義時,你打電話給getRange(rowNumber...

如果你沒有爲Srik建議,並在調試運行這個,你可能會發現在執行停止:

var preApproved = sheet.getRange(rowNumber, 14, 1, 1); 

...你會看到rowNumber是不確定的,因爲不匹配找到responseID

幾行後,你檢查是否preApproved是「true ish」。我不知道你爲什麼這樣做 - 也許這是認識到responseID可能不會被發現,並期望結果將是一個零範圍的結果getRange()調用。或者,也許你打算在該單元上獲得價值? (讓我們假設情況是這樣 - 那麼你需要使用Range.getValue()。)

更好的辦法是正確驗證搜索結果。在做這件事時,你應該小心混合行列編號(從1開始)和數組索引(從0開始)。您的cellValues是一個二維陣列,由Range.getValues()填充。

var found = false; 
var rowNumber = -1; // Would still throw an exception if used in getRange, 
        // but type is known, so better error message 
for(var i = 0; i < lastRowNum; i++) { 
    if(cellValues[i][0] === responseID) { 
    found = true; 
    var rowNumber = i+1; // Adjust to 1-based indexing 
    break;    // Done searching 
    } 
} 

if (found) { 

    var preApproved = sheet.getRange(rowNumber, 14, 1, 1).getValue(); 

    if (!preApproved) { 
    // Set the 1st level approval 
    if (approvalOne === 'true') { 
     sheet.getRange(rowNumber, 14, 1, 1).setValue(true); 
    } else { 
     sheet.getRange(rowNumber, 14, 1, 1).setValue(false); 
    } 
    sheet.getRange(rowNumber, 15, 1, 1).setValue(today); 
    ... 
    } 
} 
相關問題