Google apps script 当工作表打开时,将光标放在包含今天日期的单元格中

Google apps script 当工作表打开时,将光标放在包含今天日期的单元格中,google-apps-script,google-sheets,Google Apps Script,Google Sheets,使用today函数,我在C4单元格中有今天的日期。要查询的数据范围为G4:af250 我的剧本是: onOpen() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var dates = sheet.getRange(G4:AF250).getValues(); var today = C4(); } Goto 'today'() } }` 我得到了一个又一个错误,而不是今天的日期范围内的单元格 帮助。您开始掌握J

使用today函数,我在C4单元格中有今天的日期。要查询的数据范围为G4:af250

我的剧本是:

onOpen() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();

  var dates = sheet.getRange(G4:AF250).getValues();

  var today = C4();
    }
Goto 'today'()  }
}`
我得到了一个又一个错误,而不是今天的日期范围内的单元格


帮助。

您开始掌握JavaScript的语法,所以请继续。也许你可以试着在CodeAcademy的学习道路上继续努力,以帮助将其融入其中

function onOpen() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var dateRange = sheet.getRange('G4:AF250');
  var dates = dateRange.getValues();
  var today = sheet.getRange('C4').getValue();

  // Find today in the dateRange
  var found = false;
  var row=dates.length-1;
  while (row >= 0 && !found) {
    var col=dates[row].length-1;
    while (col>=0 && !found) {
      // If the array cell matches 'today', stop looking.
      if (!(today > dates[row][col]) && !(today < dates[row][col])) {
        found = true;
        break;
      }
      col--;
    }
    if (!found)
      row--;
  }

  // Use search row & col to offset to a cell relative to dateRange start
  var active = dateRange.offset(row, col,1,1);

  // Move user's cursor to today's date, if it is found in dateRange
  if (found)
    sheet.setActiveRange(active);
}
编辑:一些关键点的解释

此函数用于在G4:AF250范围内搜索与C4内容的匹配。预计该单元格的内容为=今天。如果该假设是正确的,那么结果应该是用户的光标将被放置在匹配的单元格中(如果存在)。如果找不到匹配项,光标将保留在它开始的位置

在Javascript中,日期匹配很棘手。您不能只测试是否相等,所以这段代码测试今天是在目标单元格中的日期之前还是之后;如果不是在之前或之后,那么它必须是相同的。还有其他方法,请参见

这里没有测试来确保从电子表格中读取的值实际上是日期对象。如果C4或dateRange中有字符串或数字,则不会进行匹配。例如,日期1/4/2014不等于字符串1/4/2014

为了测试匹配,我们的代码必须在dateRange的两个维度上循环。我们可以使用for循环,从0开始。不过,在这种情况下,我们从最大值开始,然后再向下工作。这一选择对于以后定义活动单元非常方便


和往常一样,在处理电子表格时,您需要知道电子表格的行和列引用从1开始,而Javascript数组从0开始。这意味着一旦我们使用getValues读取了一系列值,我们就得到了一个二维数组,它是0..maxRows-1乘以0..maxCols-1。如果删除-1,您将尝试引用一个不存在的值,并生成一个错误。

为什么要转到?那是哪种语言?非常感谢你的帮助。您的回答是110%正确,我正在努力学习java语法。这段代码很好用,但今天我花了2/8/2014。是否需要从.length中删除“-1”?尝试了一些自我编辑,但没有成功。我肯定对代码的工作原理没有多少了解。不管今天单元格中的日期是什么,例程总是将光标放在单元格AD250上。它应该停在V75单元,2014年7月1日在该单元。谢谢你的帮助!有一个错误的单元格引用,应该是C3,而不是C4。愚蠢的错误。如果你给我你的电子邮件,我可以和你共享电子表格?如果日期在包含一些文本字段行、一些数字字段和一些合并字段的列的顶部,这有关系吗?