JavaScript:如果语句在Loop内部不起作用

时间:2015-08-17 03:55:34

标签: javascript google-apps-script

我正在编写以下代码(截至目前为止的测试),使用Google Scripts将数据从一个电子表格传递到另一个电子表格。代码的传递工作得很好,但是我的第二个For循环 - 我打算用来检测重复值并避免将这些行传递 - 不起作用。 检查日志我看到即使" i"和" j"值正确地在If块内传递," if(sheetsIDHome [i] == sheetsIDTarget [j])"语句永远不会触发,即使我确认两个值都相同。 非常感谢任何帮助,谢谢你提前!

function move(){

  var homeBook = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = homeBook.getSheets()[0];//Sheet where my Home data is stored
  var limit = sheet.getLastRow(); //number of rows with content in them

  var evento = sheet.getRange(2, 1, limit-1).getValues(); //Even titles array
  var descript = sheet.getRange(2,2,limit-1).getValues(); //Event Descriptions array
  var tags = sheet.getRange(2,3,limit-1).getValues(); //Tags array
  var sheetsIDHome = sheet.getRange(2,4,limit-1).getValues(); //ID's array


  var targetBook = SpreadsheetApp.openById("1t3qMTu2opYffLmFfTuIbV6BrwsDe9iLHZJ_ZT89kHr8"); // Traget Workbook 
  var target = targetBook.getSheets()[0]; //Sheet1, this is my Target sheet
  if (target.getLastRow() > 1){
    var sheetsIDTarget = target.getRange(2, 4,target.getLastRow()-1).getValues();}
  else{
    var sheetsIDTarget = target.getRange(2, 4, 1).getValues();}
  var targetRow = target.getLastRow()+1; //Target row to start pasting content


   for (var i = 0; i < evento.length; i++) { //Loops throught every value from my Home sheet in order to pass it to my Target Sheet

     var isKlar = 1; //This works as a switch, data passing will not activate if isKlar set to 0

     Logger.log("Switch is: "+isKlar);

     for(var j = 0; j < sheetsIDTarget.length; j++){ //While having a certain "i" value in place, will loop though all my values in my target array using the counter "j"

       if(sheetsIDHome[i] == sheetsIDTarget[j]){ //If the ID of my curent row from Home matches any of the values in my target sheet, my "isKlar" switch should turn off and the break loop will be exited.          
         Logger.log("If Activated");
         isKlar = 0;
         break;}
       else{Logger.log("ID's: "+sheetsIDHome[i] + " vs " + sheetsIDTarget[j]);}
     }

       if(isKlar === 1){     //data passing will not activate if isKlar set to 0
         //pass data to the Target sheet
         target.getRange(targetRow,1).setValue(evento[i]);
         target.getRange(targetRow,2).setValue(descript[i]);
         target.getRange(targetRow,3).setValue(tags[i]);
         target.getRange(targetRow,4).setValue(sheetsIDHome[i]);
         targetRow++; //select the next available row in ny Target sheet
       }     
     }
   }

编辑。 - 现在我正在测试具有相同数字的两个ID阵列(例如1,2,3,4)。我的else语句中的日志确实显示了为两个数组读取的正确值...我认为这是一个范围问题,但现在我不确定问题出在哪里。

1 个答案:

答案 0 :(得分:1)

问题是工作表range.getValues()返回一个数组数组,而不是一个值数组。

values [0]是第一行,值[0] [0]是第一行中的第一个值。知道这一点,重做你的代码。