跳至当前日期单元格(日期位于一行中)Google表格

时间:2020-09-01 12:12:59

标签: javascript date google-sheets

我有一个Google表格电子表格。第2行包含日期,例如25/08 / 2020、26 / 08/2020涉及许多专栏。第一次打开文档时,是否可以运行脚本以使其跳转到包含当前日期的单元格?

我知道您定义了OnOpen()方法,该方法在打开文档时运行,但是事实证明,要获取实际起作用的代码很困难。

注意:我看过Google spreadsheet / docs , jump to current date cell on Open,但是解决方案不起作用(我假设由于我的日期全部放在一行中)。

我不太了解javascript,我了解一些基本知识。任何帮助将不胜感激。

谢谢

3 个答案:

答案 0 :(得分:1)

您在 Google spreadsheet / docs , jump to current date cell on Open找到的代码对您不起作用,因为它仅检查第一列。
我稍微修改了这段代码以连续搜索日期。
根据需要更改rowWithDates变量。

function onOpen() { // runs automatically
  
  var rowWithDates = 2; // change as needed
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh = ss.getActiveSheet();
  var range = sh.getDataRange()
  var data = range.getValues();
  var today = new Date().setHours(0,0,0,0);
  var diffref = today;
  var diff;
  var idx;
  for(var n=0;n<range.getWidth();n++){
    var date = new Date(data[rowWithDates-1][n]).setHours(0,0,0,0);
    diff=today-date;
    if(diff==0){break}
    Logger.log("diffref = "+diffref+" today-date = diff = "+diff);
    if(diff < diffref && diff > 0){idx=n ; diffref=diff}
    }
  if(n==data.length){n=idx}
  n++;
  sh.getRange(rowWithDates, n).activate();
}

答案 1 :(得分:1)

您可以使用在问题中引用的答案中提供的代码,只需更改以下几点即可:

  1. 使它看起来是一行而不是一列(请注意,数据数组正在更改第二个数组尺寸,而不是第一个)和
  2. 使它看起来在特定的行中,而不是仅硬编码到第一行中(您可以使数组使用变量“ row”而不是0;相反,我只需要代码仅提取具有日期的行的数据-对于大型电子表格来说这更快。
    function onOpen() {
      var row = 8;  //set this to be the row with the dates
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var sh = ss.getActiveSheet();
      var data = sh.getDataRange();
      var datesrow = sh.getRange(row,data.getColumn(),row,data.getWidth()).getValues();
      var today = new Date().setHours(0,0,0,0);
      for(var n=0;n<datesrow[0].length;n++){
        var date = new Date(datesrow[0][n]).setHours(0,0,0,0);
        if(date==today){break};
      }
      console.log(n);
      n++;
      sh.getRange(row,n).activate();
    }

答案 2 :(得分:0)

解决方案:

虽然其他解决方案可能暂时可以使用,但建议您在使用日期时考虑使用显示值。强烈建议您删除旧的for循环和var声明。

这将是一个更可靠的解决方案:

function onOpen() {
    
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sh =ss.getActiveSheet();
  
  const today = new Date(); 
  const today_year= today.getFullYear();
  const today_month = addZero(today.getMonth()+1);
  const today_day = addZero(today.getDate());
  const today_date =   today_day.toString() + "/" + today_month.toString() + "/" + today_year.toString();
  
  function addZero(i) {
  if (i < 10) {
    i = "0" + i;
  }
  return i;
}

  const dates = sh.getRange(2,1,1,sh.getLastColumn()).getDisplayValues().flat(1);
  dates.forEach((d,index)=>{ 
     if (d===today_date){
        sh.getRange(2,index+1).activate();}});
 
}

参考文献:

getDisplayValues()