Возврат определенных строк, которые соответствуют критериям - Google Apps Script - PullRequest
2 голосов
/ 28 января 2020

Я пытаюсь сделать следующее: у меня есть список, где N - это дата, а O - это флажок. Мне нужно получить строки, которые =N < Today() && O=False, а затем return A:B из этих соответствующих строк. Я пробовал все до конца, и я не могу заставить его работать. Какие-либо предложения?

function msg1(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var wscl = ss.getSheetByName('Connection List');
  var contact = wscl.getRange("A2:B").getValues();
  var msg1date = wscl.getRange("N2:N").getValues();
  var msg1sent = wscl.getRange("O2:O").getValues();
  var MILLIS_PER_DAY = 1000 * 60 * 60 * 24;
  var now = new Date();
  var yesterday = new Date(now.getTime() - MILLIS_PER_DAY);
  for(var i=0;i<msg1sent.length;i++){
    if(msg1sent =="FALSE"&& msg1date < yesterday){ 
      var row=i+1; 
    }
  }
 } 

1 Ответ

2 голосов
/ 29 января 2020

Если вы используете getValues ​​() флажка, он возвращает значения true или false. Если вы используете getDisplayValues ​​(), он возвращает строки «ИСТИНА» или «ЛОЖЬ». А для дат я просто использовал valueOf (), но вы также можете использовать getTime (). Самый простой способ понять все это - создать несколько промежуточных временных переменных и просмотреть их в отладчике сценариев, и вы сможете увидеть все возвращаемые значения там.

function msg1(){
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Connection List');
  var ct=sh.getRange(2,1,sh.getLastRow()-1,2).getValues();
  var date=sh.getRange(2,14,sh.getLastRow()-1,1).getValues();//date
  var sent=sh.getRange(2,15,sh.getLastRow()-1,1).getValues();//checkbox
  var dt=new Date();
  var rows=[];
  var today=new Date(dt.getFullYear(),dt.getMonth(),dt.getDate()).valueOf();//0000 or midnight
  for(var i=0;i<sent.length;i++){
    var t1=sent[i][0];
    var t2=new Date(date[i][0]).valueOf();
    var t3=today;
    if(sent[i][0]==false && new Date(date[i][0]).valueOf()<today){ 
      rows.push(ct[i]);
    }
  }
  Logger.log(rows);
 }

Если вы используете getDisplayValues ​​(), тогда это будет выглядеть так:

function msg1(){
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Connection List');
  var ct=sh.getRange(2,1,sh.getLastRow()-1,2).getValues();
  var date=sh.getRange(2,14,sh.getLastRow()-1,1).getValues();//date
  var sent=sh.getRange(2,15,sh.getLastRow()-1,1).getDisplayValues();//checkbox
  var dt=new Date();
  var rows=[];
  var today=new Date(dt.getFullYear(),dt.getMonth(),dt.getDate()).valueOf();
  for(var i=0;i<sent.length;i++){
    var t1=sent[i][0];
    var t2=new Date(date[i][0]).valueOf();
    var t3=today;
    if(sent[i][0]=="FALSE" && new Date(date[i][0]).valueOf()<today){ 
      rows.push(ct[i]);
    }
  }
  Logger.log(rows);
 } 
...