如何在包含今天日期的单行中打开Goog​​le表格电子表格

时间:2016-04-12 20:33:20

标签: javascript date google-sheets editor

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

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

Marshmallow的回答:

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”并更改了指示的偏移量;但是,我没有看到代码有任何影响。更不用说了开到今天的日期。

我在这里缺少什么?有什么建议吗?

1 个答案:

答案 0 :(得分:1)

转置需要更改的另外两个地方是: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;
    }    
  }
}