Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果函数-谷歌脚本-多个条件_Javascript_For Loop_If Statement_Google Apps Script - Fatal编程技术网

Javascript 如果函数-谷歌脚本-多个条件

Javascript 如果函数-谷歌脚本-多个条件,javascript,for-loop,if-statement,google-apps-script,Javascript,For Loop,If Statement,Google Apps Script,我正在尝试运行IF函数,将第一列中的日期与“last month”匹配,将最后一列中的日期与“last date”匹配,并将与此条件匹配的所有行(不包括第一列和最后一列)复制并粘贴到列表底部。 这是我正在运行的脚本,当我知道至少有100行符合以下条件时,它找不到任何匹配项: function myFunction() { var MCS = SpreadsheetApp.openById('[ID REMOVED FOR THIS Q]'); var MRB = MCS.getSheet

我正在尝试运行IF函数,将第一列中的日期与“last month”匹配,将最后一列中的日期与“last date”匹配,并将与此条件匹配的所有行(不包括第一列和最后一列)复制并粘贴到列表底部。 这是我正在运行的脚本,当我知道至少有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);
}
}}
函数myFunction(){
var MCS=SpreadsheetApp.openById(“[ID已为此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=新日期();
LM.设定日期(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);

对于(var i=0;i我认为问题可能在于MRBrange是一个2d数组。因此我使用了另一个循环将其转换为1d数组。希望这有帮助

  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);
}
}}
函数myFunction(){
var MCS=SpreadsheetApp.openById(“[ID已为此Q删除]”);
var MRB=MCS.getSheetByName('Media Rates Back');
var MRBrangeA=MRB.getRange(1,1,MRB.getLastRow(),1).getValues();//2d数组
var MRBrange=[];

对于(var i=0;i,我将整个范围作为一个数组,而不是将列作为单独的范围,然后循环检查这两个列

我还假设您的值在工作表中被格式化为日期,在这种情况下,您不需要使用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);
       }
    }

您是否尝试将Date.parse()方法中的数据放在if语句之前的var中?此外,您是否尝试将deux比较分隔在两个不同的if语句中,如if(…{if(…{}})中?我刚刚做了这些更改,但仍然不起作用-谢谢。我想我使用[I]肯定有问题实际上,如果您使用的是二维数组,那么应该使用[I][0]而不是简单地使用[I]来获取正确的值