这里有一个奇怪的问题。我正在使用 Google Apps 脚本编写脚本。脚本的一部分从 1 个范围/数组(“a”)中获取值,在第二个范围/数组(“b”)中查找值,然后将第三个范围/数组(“c”)中的相应值写入电子表格中的 F 列。它基本上是一个vlookup。
当我检查代码、调试器等时,一切看起来都很好。并且输出到工作表中看起来也不错。除了当我运行程序时,工作表中缺少最后一个值。当我使用调试器缓慢运行程序时,似乎由于某种原因,在下一轮循环完成之前,这些值不会打印到 F 列。根据当时变量的值,这实际上没有任何意义。例如,当 i=4 时,它应该打印到 F6。但它会将之前的值打印到 F5。所有正确的值最终都位于正确的位置(最后一个除外),但发生这种情况时时间似乎已关闭,这就是为什么我错过了最后一个值。
注意:我尝试看看这是否只是时间延迟,但情况似乎并非如此。我已经重新加载了电子表格,等待了一段时间等等。仅落后了 1 步。
代码如下,我认为非常简单。任何帮助将不胜感激
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;
}
}
}
最佳答案
我尝试使用以下代码重新创建您的情况:
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
关于javascript - Google Apps 脚本写入电子表格列一步落后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34773430/