当前位置: 首页 > 知识库问答 >
问题:

跳转到当前日期单元格(日期在一行中)Google Sheets

令狐高洁
2023-03-14

我有一个谷歌表单电子表格。第2行包含日期,例如2020年8月25日、2020年8日26日,跨越多个列。有没有一个脚本我可以运行,使它跳转到包含文档第一次打开时的当前日期的单元格?

我知道您定义了OnOpen()方法,它在打开文档时运行,但是,获取实际工作的代码很困难。

注意:我查看了Google电子表格/文档,在打开时跳转到当前日期单元格,但解决方案不起作用(我假设是因为我的日期都在一行中)。

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

谢啦

共有3个答案

司承业
2023-03-14

虽然其他解决方案目前可能有效,但建议在使用Dates时考虑显示值。强烈建议去掉旧的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();}});
 
}

getDisplayValue()

拓拔骁
2023-03-14

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

    < li >使它看起来像一行,而不是一列(注意,数据数组改变的是第二个数组维数,而不是第一个);和 < li >使它在特定的行中查找,而不只是硬编码到第一行(您可以让数组使用变量“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();
    }
邹德泽
2023-03-14

您在Google电子表格/文档中找到的代码,跳转到打开上的当前日期单元格对您不起作用,因为它只检查第一列。
我稍微修改了一下这段代码,以搜索一行中的日期。
根据需要更改行使用变量。

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();
}
 类似资料:
  • 问题内容: 我已经进行了所有设置,将当前日期存储到Java中的变量中。我要弄清楚的是如何存储当前日期之后1年的日期。 这是我当前的日期: 因此,例如,如果今天是今天,它将存储2/18/2013。我正在尝试存储日期2/18/2014。我将如何去做呢? 问题答案: 如果您不想拖动外部库,只需使用 请注意,如果日期是,并且您添加了1年,则将获得

  • 问题内容: 我有这个PHP代码: 我用它来获取当前日期,而我需要未来5年的日期,例如: 我怎样才能做到这一点? 问题答案: 尝试:

  • 我正在尝试将DatePicker日期格式化为简单的数据格式(“yyyy-MM-dd HH: mm: ss Z”)。有人告诉我,我需要使用简单的数据格式将其解析为日期对象-简单的数据格式(“yyyy-MM-dd”),然后将其格式化为我需要的内容,如下所示。但是,我在尝试捕捉块中收到错误“重复局部变量eDate”。任何专家都可以查看我的代码并提出建议吗? 已更新

  • 问题内容: 我在将日期正确插入数据库中时遇到问题。 我使用这种格式,并且正确回显,但是,当我插入 它似乎无法成功运行,时间仍然是00:00:00,如果您能找到很好的解决方案,谢谢。 问题答案: 如果要存储当前时间,请使用MYSQL的函数。 如果需要使用PHP进行格式化,请尝试

  • 问题内容: 有没有一种简单的方法可以将一种日期格式转换为PHP中的另一种日期格式? 我有这个: 但是我当然希望它返回一个当前日期,而不是返回“黎明”。我究竟做错了什么? 问题答案: 第二个参数必须是正确的时间戳(自1970年1月1日以来的秒数)。您正在传递一个字符串,date()无法识别。 您可以使用 strtotime() 将日期字符串转换为时间戳。但是,即使strtotime()也无法识别格式

  • 问题内容: 我接收到来自Twitter的特定日期以特定格式发送的Twitter消息: 我想将这些日期存储在带有djangos DateTimeField字段的postgresql中的“带有时区的时间戳”字段中。但是,当我存储该字符串时,出现此错误: 我可以自动将twitter datetype转换为python datetime时间(在我的应用程序中的其他地方可以保存日期)。 问题答案: 编写这样