IF 函数 - Google 脚本 - 多个条件

Posted

技术标签:

【中文标题】IF 函数 - Google 脚本 - 多个条件【英文标题】:IF Function - Google Scripts - multiple criteria 【发布时间】:2018-01-09 22:54:23 【问题描述】:

我正在尝试运行 IF 函数以将第一列中的日期与“上个月”匹配,将最后一列中的日期与“最新日期”匹配,然后复制并粘贴所有符合此条件的行(不包括第一列和最后一列)到列表的底部。 这是我正在运行的脚本,当我知道至少有 100 行符合此条件时,它没有找到任何匹配项:

function myFunction() 
  var MCS = SpreadsheetApp.openById('[ID REMOVED FOR THIS Q]');
  var MRB = MCS.getSheetByName('Media Rates Back');
  var MRBrange = MRB.getRange(1,1,MRB.getLastRow(),1).getValues();
  var dest = MRBrange.filter(String).length + 1;
  var LM = new Date();
  LM.setDate(1);
  LM.setMonth(LM.getMonth()-1);
  var LMs = Date.parse(LM);
  var Datenew = MRB.getRange(MRB.getLastRow(),MRB.getLastColumn()).getValue();
  var Datecol = MRB.getRange(1,6,MRB.getLastRow(),1).getValues();
  var Datenews = Date.parse(Datenew);

for(var i=0; i<MRBrange.length; i++) 

if(Date.parse(MRBrange[i])==LMs && Date.parse(Datecol[i])==Datenews ) 
  var NewRange = MRB.getRange(i,2,(MRB.getLastRow()-i),5);
  var NewRangeV = NewRange.getValues();
  var destination = MRB.getRange(MRB.getLastRow()+1,2);
Logger.log(NewRange);                                                  

NewRange.copyTo(destination);


else
  Logger.log(i);


任何帮助将不胜感激!

【问题讨论】:

您是否尝试将 Date.parse() 方法中的数据放在 if 语句之前的 var 中?另外,您是否尝试将 deux 比较分为两个不同的 if 语句,例如 if(..)if(..) ? 我刚刚进行了这些更改,但仍然无法正常工作 - 谢谢。我认为我对 [i] 的使用一定有问题 确实,您使用的是二维数组,您应该使用 [I][0] 而不是简单地 [I] 来获取正确的值 【参考方案1】:

我不会将列作为单独的范围,而是将整个范围作为一个数组,然后循环遍历并检查两列。

我还假设您的值在工作表中被格式化为日期,在这种情况下您不需要使用 Date.parse(),并且您的实际日期逻辑是正确的。

您可以尝试使用调试器并在 IF 处设置断点,以便检查它正在比较的值。或调用 Logger.log 来列出您的比较。

    var last_month_column = 1;
    var newest_date_column = MRB.getLastColumn();

    var MRBrange = MRB.getRange(1,1,MRB.getLastRow(),newest_date_column).getValues();

    for(var row in MRBrange) 
       if(MRBrange[row][last_month_column]==LMs && Datecol[row][newest_date_column] ==Datenews ) 
           /* your copy logic here */
       else
           Logger.log(i);
       
    

【讨论】:

【参考方案2】:

我认为问题可能在于 MRBrange 是一个二维数组。所以我使用另一个循环将其转换为一维数组。

  function myFunction() 
  var MCS = SpreadsheetApp.openById('[ID REMOVED FOR THIS Q]');
  var MRB = MCS.getSheetByName('Media Rates Back');
  var MRBrangeA = MRB.getRange(1,1,MRB.getLastRow(),1).getValues();//2d array
  var MRBrange=[];
  for(var i=0;i<MRBrangeA.length;i++)
  
    MRBrange.push(MRBrangA[i][0]);//1d array
  
  
  var dest = MRBrange.filter(String).length + 1;
  var LM = new Date();//current day
  LM.setDate(1);//first day of month
  LM.setMonth(LM.getMonth()-1);//first day of last month
  var LMs = Date.parse(LM);
  var Datenew = MRB.getRange(MRB.getLastRow(),MRB.getLastColumn()).getValue();
  var Datecol = MRB.getRange(1,6,MRB.getLastRow(),1).getValues();
  var Datenews = Date.parse(Datenew);

for(var i=0; i<MRBrange.length; i++) 

if(Date.parse(MRBrange[i])==LMs && Date.parse(Datecol[i])==Datenews ) 
  var NewRange = MRB.getRange(i,2,(MRB.getLastRow()-i),5);
  var NewRangeV = NewRange.getValues();
  var destination = MRB.getRange(MRB.getLastRow()+1,2);
Logger.log(NewRange);                                                  

NewRange.copyTo(destination);


else
  Logger.log(i);


【讨论】:

以上是关于IF 函数 - Google 脚本 - 多个条件的主要内容,如果未能解决你的问题,请参考以下文章

Google 表格 - 条件格式 - 多个复选框

如何在 shell if 语句中表示多个条件?

具有多种条件的Google脚本条件格式

shell 脚本 if 判断多个条件

Google-apps-script 函数 CHAR() 和 CODE()

if函数多个条件怎么用 if函数多个条件如何使用啊