Google Apps脚本写入电子表格专栏落后一步

时间:2016-01-13 17:41:36

标签: javascript google-apps-script google-sheets

这里有个奇怪的问题。我正在使用Google Apps脚本编写脚本。部分脚本从1个Range / array(" a")获取值,在第二个Range /数组中找到该值(" b"),然后从a写入相应的值第三个范围/数组(" c")到电子表格中的F列。它基本上是一个vlookup。

当我检查代码,调试器等时,一切看起来都很好。并且表单中的输出看起来也很好。除了我运行程序时,工作表中缺少最后一个值。当我使用调试器慢慢运行程序时,似乎由于某种原因,值不会被打印到列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;
      }
    }
  }

1 个答案:

答案 0 :(得分: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