2017-02-27 45 views
0

我有一个脚本,移动一行数据(实际上只有1个单元格)从一张表移动到另一张表格,在满足一定条件时(在这种情况下,它是当Col17 =“是”时编辑)。我正在选择要移动的数据:复制数据不工作,除非目标行是空的

var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1); 
s.getRange(row, 1, 1, 1).copyTo(target); 

其中's'是活动工作表,'targetSheet'是目标工作表。

当我的目标工作表为空白时,此功能完美无缺。

但是,我想用数据填充目标工作表的其他列,并且只能在列A中操作此脚本。只要将数据添加到任何其他列,我的脚本就会将复制的值插入任何现有数据,无论列A中是否有数据。

例如我在单元格A1,A2和A3中有1,2,3个,然后在B1,B2,B3,B4和B5单元格中有A,B,C,D,E。我运行我的脚本。新数据插入A6(第一个完全空行)。我希望它转到A4(Col A中的第一个空行)。

回答

0

问题可能是因为您在电子表格的实际lastRow中有一些数据。电子表格中没有lastRow + 1行。 当您将数据插入到电子表格的lastRow中时,最好在lastRow后面插入一行,然后添加数据。

var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1); 
targetSheet.insertRowAfter(targetSheet.getLastRow()); 
s.getRange(row, 1, 1, 1).copyTo(target); 
0

我厌倦了与getLastRow功能 - 每当我只要一个范围getLastRow也将只返回我的行数范围内,而不是包含数据的数量。

最后我写了一个简单的循环来计算包含数据的单元格,并用它来代替。可能不是最好的解决方案,但有效。

0

那么考虑您的数据看起来像

A1 B1 
A2 B2 
A3 B3 
    B4 
    B5 

.getLastRow()预期的反应将是5,因为最后一排有数据,它是在B列第5行考虑您正在使用的纸张工作。现在没有办法让函数能够明确地看到最后一个条目在列A的哪个位置。相反,您可以使用array = getRange('A:A').getValues(),将值添加到第一个空数组索引并使用getRange('A:A').setValues(array)来更新列

+0

是的,我理解了getLastRow的问题,但是我所有尝试使用指向Col A的getRange仍然返回'5'。我必须在某处出现语法错误。 感谢您的数组建议,我认为这是比我自己的循环编写的更清洁的解决方案! – SilkyJohnston

相关问题