我有一个脚本,根据开始时间和停止时间查找学生老师的列表。它结合了Google表格基于单元格的公式和Google脚本。
在电子表格中,我有一个数据库表 - db
- 这是一个按列排序的学生及其老师的静态列表。第二张表 - tchrLookup
- 使用数据验证和INDEX - MATCH
搜索将数据从数据库中提取到查找中。
脚本分析查找页面以(最终)为搜索中匹配的教师构建电子邮件通知。我的数组都正确返回,除了最后一个。我无法弄清楚我的逻辑在哪里。
脚本
function findTchr() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var ss = sheet.getSheetByName('tchrLookup');
// Loop through each row and get the teachers assigned as an array
var range = ss.getRange(2, 2, ss.getLastRow()-1, ss.getLastColumn());
Logger.log(range.getValues());
var cells = range.getValues();
for(i=0;i<cells.length;i++) {
// Get the start and stop values for each row
var start = cells[i][0];
var stop = cells[i][1];
// Determine the number of columns to return
var tchrsToGet = stop-start+1;
Logger.log("Start: " + start + ", Stop: " + stop);
Logger.log("# of cols to get: " + tchrsToGet);
// Return teachers based on start/stop time
var tchrs = ss.getRange(2, start+3, 1, tchrsToGet);
Logger.log(tchrs.getValues().toString());
}
}
这是运行脚本后日志文件的屏幕截图。
您可以在顶部看到原始值数组。最后的日志条目错误地返回第三位老师,我无法弄清楚原因。我有一个带有编辑权限的 test spreadsheet ,因此您可以看到整个内容是如何协同工作的。
答案 0 :(得分:0)
第22行:
var tchrs = ss.getRange(2, start+3, 1, tchrsToGet);
行参数永远不会改变。代码始终检查第2行。更改为:
var tchrs = ss.getRange(i+2, start+3, 1, tchrsToGet);
第一个参数是起始行。开始行应在i
循环中以for
的值递增。