2013-07-24 30 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); 
    ... 
    } 
} 
相关问题