我已设置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);
有什么建议吗?
答案 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);
...
}
}