根据用户输入返回单元格范围

时间:2015-09-13 18:50:31

标签: google-apps-script google-sheets

我有一个脚本,根据开始时间和停止时间查找学生老师的列表。它结合了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());
  }
}

这是运行脚本后日志文件的屏幕截图。

Log entry

您可以在顶部看到原始值数组。最后的日志条目错误地返回第三位老师,我无法弄清楚原因。我有一个带有编辑权限的 test spreadsheet ,因此您可以看到整个内容是如何协同工作的。

1 个答案:

答案 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的值递增。