电子表格跳转到当前日期问题

Spreadsheet jump to current date issue

亲爱的社区,您好,

不幸的是,我无法弄清楚@Serge insas AppScript 中跳转到我自己的电子表格中今天的单元格的问题在哪里。

修复了不同时区日期格式的潜在问题,但是,脚本跳转到最后一个单元格,如下所示:sh.getRange(5,sh.getLastColumn()).activate(); 指示,而不是今天的单元格。

重要的是我的电子表格是水平构建的,here is the link

这是我的版本:

function JumpToToday() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh = ss.getActiveSheet();
    sh.getRange(5,sh.getLastColumn()).activate();
  var data = sh.getDataRange("E5:NE5").getValues();
  var offsetToSS = new Date('22/02/2022').setHours(0,0,0,0);
  var today = parseInt((new Date().setHours(0,0,0,0)-offsetToSS)/86400000,10)+1;
  for(var n=0;n<data[0].length;n++){
    var date = data[0][n];
    Logger.log("date = "+data[0][n]+" =? "+today);
    if(date==today){break};
  }
  n++;
  sh.getRange(1,n).activate();
}

问题可能是由于脚本先到最后一列然后从 n=0 开始计数吗?

嗯,我今天学到了一些新东西。 Date.valueOf() 和Date.setHours(0,0,0,0) return 一样,date 的值以毫秒为单位。但是你的日期无效。

新日期(“22/02/2022”)returns 无效日期。

function dummy() {
  try {
    var offsetToSS = new Date('02/22/2022').valueOf();
    console.log(offsetToSS);
    var offsetToSS = new Date('02/22/2022').setHours(0,0,0,0);
    console.log(offsetToSS);
    var today = parseInt((new Date().setHours(0,0,0,0)-offsetToSS)/86400000,10)+1;
    console.log(today);
  }
  catch(err) {
    console.log(err);
  }
}

8:14:09 AM  Notice  Execution started
8:14:09 AM  Info    1645506000000
8:14:09 AM  Info    1645506000000
8:14:09 AM  Info    1
8:14:09 AM  Notice  Execution completed

在 sheet 中获取当前日期。

  1. 你要数一数从1月1日到今天的天数
  2. 使用 Sheet.getRange(row, col, numRows, numCol)col 参数中的天数 + 在 1 月 1 日单元格之前使用的列数。

我在这里创建了一个代码,它将在 user2501097 的回答 here:

的帮助下激活当前日期的单元格
function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var snoopiSheet = ss.getSheetByName("Snoopi");
  var range = snoopiSheet.getRange(5, getCurrentDayofYear() + 5, 1,1);
  range.activate();
}


function getCurrentDayofYear(){
  var date = new Date();
  return (Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()) - Date.UTC(date.getFullYear(), 0, 0)) / 24 / 60 / 60 / 1000;
}

输出:

注意:我在上面的例子中使用了Snoopi sheet,我在getRange()的第2个参数中添加了+5,因为计数的开始在第 5 列或 1 月 1 日。此外,当使用多个工作表时,请确保使用 ss.getSheetByName(name) 这是为了防止脚本将代码应用于不同的 sheets,如果您使用 getActiveSheet()

参考文献: