找不到方法(类)(类)getRange((class),number)Google Forms上的错误

时间:2013-07-24 21:52:17

标签: google-apps-script

我已设置Google表单以提交“Approve”或“Deny”的电子邮件。在电子邮件中单击任一按钮后,它应该进入电子表格中的字段。相反,我收到以下错误: 找不到方法(类)(类)getRange((class),number)

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); 

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

问题是,当getRange(rowNumber...未被定义时,您正在调用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);
    ...
  }
}