Как автоматизировать лист, чтобы активировать / переместить в ячейку с сегодняшней датой - PullRequest
0 голосов
/ 23 декабря 2018

Я пытаюсь реализовать этот скрипт, чтобы найти текущую дату на всех просматриваемых листах (не скрыто) и перейти к активному диапазону дат (сегодня) на любой вкладке, при которой она открыта.

Я нашелэтот поток, но теперь он заблокирован, https://productforums.google.com/forum/#!topic/docs/NiPjCPUOx3M

Сценарий, который они использовали для достижения этой цели, указан в разделе кода:

Этот код не работает для моего листа, как моя датавводятся как календарные даты и, таким образом, регистрируются как числовые значения.

Может ли кто-нибудь помочь мне с этим?

Мой лист: https://docs.google.com/spreadsheets/d/1W3KMwE2dEqe0dkoggKJ5LRT3qHEgwD71izVKx8gJn08/edit?usp=sharing

Диапазоны дат для каждоголисты перечислены в: C4: I4 C51: I51 C98: I98 C145: I145

function onOpen() {

var sheets, sheet, d, now, today, flag, r;

sheets = SpreadsheetApp.getActive().getSheets();
now = new Date(),
today = new Date(now.getYear(), now.getMonth() + 1, now.getDate(), 0, 0, 0, 0)
    .getTime();
for (var i = 0, len = sheets.length; i < len; i += 1) {
    v = sheets[i].getRange('A:A')
        .getValues()
    for (var j = 0, l = v.length; j < l; j += 1) {
        r = v[j][0];
        if (r && isDate_(r)) {
            d = new Date(r.getYear(), r.getMonth() + 1, r.getDate(), 0, 0, 0, 0)
                .getTime();
            if (d == today) {
                sheets[i].setActiveRange(sheets[i].getRange(j + 1, 6));
                break;
            }
        }
    }
}
}

function isDate_(sDate) {

var tryDate = new Date(sDate);
return (tryDate && !isNaN(tryDate));
}

Чтобы лист нашел ячейку с текущей датой и активировал / переместился к ней автоматически.

1 Ответ

0 голосов
/ 23 декабря 2018

Finding Today с RangeList

function findToday() {
  var shts=SpreadsheetApp.getActive().getSheets();
  var now=new Date();
  var today=new Date(now.getYear(), now.getMonth(), now.getDate()).valueOf();
  for(var s=0;s<shts.length;s++) {
    var sh=shts[s];
    if(sh.getLastRow() && sh.getLastColumn()) { 
      //var rgA=sh.getRangeList(['C4:I4','C6:I6','C8:I8','C10:I10']).getRanges();//test ranges
      var rgA=sh.getRangeList(['C4:I4','C51:I51','C98:I98','C145:I145']).getRanges();
      for(var r=0;r<rgA.length;r++){
        var rg=rgA[r];
        var vA=rg.getValues();
        for(var i=0;i<vA.length;i++) {
          for(var j=0;j<vA[i].length;j++){
            if(vA[i][j]){
              var row=rg.getRow();
              var col=rg.getColumn();
              var t=new Date(vA[i][j]);
              var d=new Date(t.getYear(), t.getMonth(), t.getDate()).valueOf();
              if (d==today) {
                var name=sh.getName();
                sh.setActiveRange(sh.getRange(sh.getLastRow()+1,1));
                SpreadsheetApp.flush();
                sh.setActiveRange(sh.getRange(row + i, col + j));
                return;
              }
            }
          }
        }
      }
    }
  }
}

В вашей функции onOpen, которую, возможно, придется установить, просто вызовите findToday ();

function onOpen() {
  findToday();
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...