javascript - 如何将 Google 表格电子表格打开到包含今天日期的单行中的单元格

标签 javascript date google-sheets editor

我正在尝试使用脚本编辑器将 Google 表格文档设置为打开第 2 行中包含当前日期的单元格。日期按时间顺序排列,每天从 A2:IK2 开始。它们的格式为 mm/dd。

我在该网站上找到了一个类似问题的答案,但是他们的日期列在一列中,而我的日期列在一行中。 Marshmallow 在这里发布了以下代码:https://webapps.stackexchange.com/questions/78927/how-to-make-google-sheet-jump-to-todays-row-when-opened ).

棉花糖的回答:

function onOpen() {
 var menu = [{name: "Jump to today's date", functionName: "jumpToDate"}];
 SpreadsheetApp.getActiveSpreadsheet().addMenu("Custom", menu);
 jumpToDate();
}

function jumpToDate() {
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getActiveSheet();
 var range = sheet.getRange("A:A");
 var values = range.getValues();  
 var day = 24*3600*1000;  
 var today = parseInt((new Date().setHours(0,0,0,0))/day);  
 var ssdate; 
 for (var i=0; i<values.length; i++) {
   try {
     ssdate = values[i][0].getTime()/day;
   }
   catch(e) {
   }
   if (ssdate && Math.floor(ssdate) == today) {
     sheet.setActiveRange(range.offset(i,0,1,1));
     break;
   }    
 }
}

我修改为:

function onOpen() {
 var menu = [{name: "Jump to today's date", functionName: "jumpToDate"}];
 SpreadsheetApp.getActiveSpreadsheet().addMenu("Custom", menu);
 jumpToDate();
}

function jumpToDate() {
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getActiveSheet();
 var range = sheet.getRange("A2:IK2");  //given that it is in row 2
 var values = range.getValues();  
 var day = 24*3600*1000;  
 var today = ((new Date().setHours(0,0,0,0))/day);  
 var ssdate; 
 for (var i=0; i<values.length; i++) {
   try {
     ssdate = values[i][0].getTime()/day;
   }
   catch(e) {
   }
   if (ssdate && Math.floor(ssdate) == today) {
     sheet.setActiveRange(range.offset(0,i,1,1));  //to offset columns not rows
     break;
   }    
 }
}

我认为我已经考虑了从行到列的换位(范围“A:A”到“A2:IK2”并更改指示的偏移量;但是,我没有看到代码有任何影响。更不用说打开到今天的日期。

我在这里错过了什么?有什么建议吗?

最佳答案

换位需要更改的另外两个地方是:values[0][i] 而不是 values[i][0],以及 values[0 ].length 而不是 values.length

为了解决 RobG 的评论,我还更改了比较逻辑,用直接的不等式替换除法和底数:当前时间必须在电子表格中规定的日期的开始和结束之间。

function onOpen() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var range = sheet.getRange("2:2");   // get all 2nd row
  var values = range.getValues();
  var day = 24*3600*1000;  
  var now = Date.now();  
  var ssdate; 
  for (var i = 0; i < values[0].length; i++) {
    try {
      ssdate = values[0][i].getTime();
    }
    catch(e) {
    }
    if (ssdate && ssdate <= now && now < ssdate + day) {
      sheet.setActiveRange(range.offset(0,i,1,1));
      break;
    }    
  }
}

关于javascript - 如何将 Google 表格电子表格打开到包含今天日期的单行中的单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36583526/

相关文章:

google-apps-script - 如何使用谷歌脚本在谷歌电子表格上设置范围对齐?

javascript - 如何检查我的对象类型是图像?

javascript - 移动所有列是列表粘贴到工作表一次

javascript - 使用变量 url 创建 href

java - 如何在java swing中弹出错误来检查酒店入住日期是否应该早于退房日期?

单击图标的 jQuery 日期选择器

python - python中日期的迭代器

javascript - 如何从 Google 表格中的单元格获取值,以用作 Google 脚本中的数字变量

javascript - 找不到快速路线

Javascript SetTimeout 和循环