0

我已经设置了一个 Google 表单来提交带有“批准”或“拒绝”的电子邮件。在电子邮件中单击任一按钮后,它应输入电子表格中的字段。相反,我收到以下错误:找不到方法(类)(类)getRange((类),数字)

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

有什么建议么?

4

1 回答 1

0

问题是您在可能未定义getRange(rowNumber...时调用。rowNumber

如果你按照斯里克的建议做,并在调试器中运行它,你可能会发现执行停止在:

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

...您会看到这rowNumber是未定义的,因为找不到匹配responseID项。

几行之后,您正在检查是否preApproved是“ trueish”。我不知道您为什么要这样做 - 也许这是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);
    ...
  }
}
于 2013-07-25T15:34:37.097 回答