在工作表的多个标签中打开今天的日期

时间:2020-03-02 21:17:58

标签: google-apps-script google-sheets

我正尝试在工作表中使用此代码,但是出现问题。我在一张纸上有12个标签。每个表代表一个新月。我希望它在相应的标签中自动跳转到当前日期。

我的约会从H1开始,一直到AL1。

我尝试调整脚本以反映该情况,但收效甚微

   function onOpen() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var range = sheet.getRange("H1:AL1");   // 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;
    }    
  }
}

1 个答案:

答案 0 :(得分:0)

对于此解决方案,我假设您已订购了从1月到12月的所有月份,因此1月处于第一位置。

每次打开电子表格时,您都可以设置一个新的日期,获取月份和日期,并在表格和范围中使用active

function onOpen(){

  let date = new Date();
  let month = Utilities.formatDate(date, 'UTC', 'M');
  let day = Utilities.formatDate(date, 'UTC', 'd');

  var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();

  sheets[month - 1].activate();

  var range = sheets[month - 1].getRange(1, 7 + parseInt(day));
  sheets[month - 1].setActiveRange(range);

}

您会注意到7 + parseInt(day)。由于H从第8个位置开始,我们加上当月的天,但要减去1。否则,该月的第一天将是8 +1(H +1),并且将重点放在I上。此外,{{ 1}}是将parseInt转换为整数以避免day

参考