返回符合条件的特定行 - Google Apps 脚本

Returning certain rows which meet a criteria - Google Apps Script

我想做的是:我有一个列表,其中 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; 
    }
  }
 } 

如果您使用复选框的 getValues(),它 return 是真或假布尔值。如果您使用 getDisplayValues() 它 returns "TRUE" 或 "FALSE" 字符串。对于日期,我只使用了 valueOf(),但您也可以使用 getTime()。解决所有这些问题的最简单方法是创建一些中间临时变量并在脚本调试器中查看它们,您可以在那里看到所有 return 值。

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);
 }