如何修复工作表之间自动传输行的错误集成?



我要完成的是:

  • 有一个名为"data"的数据输入表(其数据由表单提供)
  • 脚本将信息从数据移动到 sheet1/sheet2/.../sheetn(根据在第 3 列中找到的字符串)
  • 脚本还会删除移动的行

我认为 deleteRow 命令工作正常,我怀疑罪魁祸首是检测数组中的字符串。

我已经多次使用搜索,尝试了一些代码,并且我已经确定这是最有可能的候选者(它由库珀),因为它几乎在做我需要它做的事情。

我尝试了一下日志记录,但不幸的是我对编码还不太了解。目前我正在通过反复试验来学习。 如果我记录 vals[i][2],我只得到 1 个字符串,而不是我的示例输入中的几个字符串。

当我只设置一个目标表 (sh1) 和目标项时,它可以工作。 但是当我扩展它时,它不再起作用了。

{
var ss=SpreadsheetApp.getActive();
var sh0=ss.getSheetByName('Data');
var rg0=sh0.getDataRange();
var sh1=ss.getSheetByName('Applesheet');
var sh2=ss.getSheetByName('Banana');
var sh3=ss.getSheetByName('Cherry');
var vals=rg0.getValues();
Logger.log(vals)  
for(var i=vals.length-1;i>0;i--)
{
if(vals[i][2]=='Apple')
Logger.log("PV Abfrage -", vals[i][2])
{
sh1.appendRow(vals[i]);
sh0.deleteRow(i+1);
}
if(vals[i][2]=='Banana') //also tried with else if here
{
sh2.appendRow(vals[i]);
sh0.deleteRow(i+1);
}
if(vals[i][2]=='Cherry')
{
sh3.appendRow(vals[i]);
sh0.deleteRow(i+1);
}
}
}

我的代码移动不包含任何术语的行。 它也应该只移动包含此术语的行,但它这样做非常难以实现。 我认为所有行都附加到Applesheet,包含香蕉的行被移动到香蕉,但带有樱桃的行不会。 我绝对没有足够的经验来判断,但这段代码似乎有点不可靠,因为即使是我只有一个 if 的测试版本也无法按照我想要的方式执行。

问题:

您的第一个if语句被强制返回true您在if{之间包含的Logger.log()。一旦删除它,您的代码就会完全按照您的预期运行。


例:

如果我们运行以下脚本:

var check = ['Apple', 'Pear', 'Fruit'];
for (i = 0; i < check.length; i++) {
if (check[i] === 'Apple') {
console.log('Found!');
}
}

我们循环遍历一个数组,并在每次找到数组中的项目时记录"Found!"。这与脚本的工作方式相同。它按预期工作,"Apple"在数组中只找到一次,因此日志如下所示:

发现!


一旦我们在if{之间放了一个日志,就像这样:

var check = ['Apple', 'Pear', 'Fruit'];
for (i = 0; i < check.length; i++) {
if (check[i] === 'Apple') 
console.log("Oops!") 
{
console.log('Found!');
}
}

我们得到以下结果:

哎呀!
发现!
发现!
发现!


总结:

确保包含if{之间的if语句的条件,添加任何其他内容都可能返回误报,就像您今天遇到的那样。


参考:

  • JavaScriptif语句

最新更新