2016-01-13 98 views
1

奇怪的问题在这里。我正在使用Google Apps脚本撰写脚本。部分脚本从1范围/数组(“a”)获取值,在第二个范围/数组(“b”)中查找值,然后将第三个范围/数组(“c”)的对应值写入电子表格中的F列。这基本上是一个查找。Google Apps脚本写入电子表格列背后的一步

当我检查代码,调试器等一切看起来不错。并且输出到表格中看起来也不错。除了运行程序时,表单中缺少最后一个值。当我使用调试器缓慢运行程序时,似乎由于某些原因,直到下一轮循环完成后才会将值打印到F列。基于当时变量的值,这没有任何意义。例如,当i = 4时,它应该打印到F6。但相反,它将先前的值打印到F5。所有正确的值在最后都是在正确的位置(除了最后一个),但是当发生这种情况时,时机似乎是关闭的,这就是为什么我错过了我的最后一个值。

注:我试过看看它是否只是一个时间延迟,而且似乎并非如此。我重新加载了电子表格,等了一会儿,等等。它只落后了一步。

代码如下,很简单,我认为。任何帮助,将不胜感激

loop1: 
    for(i=0;i<a.length;i++){ 
    loop2: 
    for(j=0;j<b.length;j++){ 
     if(a[i].valueOf() == b[j].valueOf()){ 
     sheet.getRange("F"+(i+2)).setValue(c[j]); 
     break loop2; 
     } 
    } 
    } 

回答

0

我试图重新创建你的情况与下面的代码:

function myFunction() { 
    var a = ['one','6','match']; 
    var b = ['two','Vee','match']; 
    var c = ['three','Vee','match']; 

    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sh = ss.getActiveSheet(); 

    loop1: 
    for(i=0;i<a.length;i++){ 
     loop2: 
     for(j=0;j<b.length;j++){ 
     //Logger.log('a[i].valueOf() ' + a[i]) 
     //Logger.log('b[j].valueOf() ' + b[j]) 

     Logger.log(a[i].valueOf() == b[j].valueOf()); 
     if (a[i].valueOf() == b[j].valueOf()) { 
      Logger.log('they match!'); 
      Logger.log('i: ' + i); 
      Logger.log('j: ' + j); 
      sh.getRange("F"+(i+2)).setValue(c[j]); 
      break loop2; 
     } 
     } 
    } 
}; 

的代码运行,它把一个值单元格F4与所提供的阵列数据。

日志:

false 
false 
false 
false 
false 
false 
false 
false 
true 
they match! 
i: 2 
j: 2 
相关问题