除非目标行为空,否则复制数据不起作用

时间:2017-02-27 16:52:00

标签: google-apps-script

我有一个脚本可以在满足某个条件时将一行数据(实际上只有1个单元格)从一个工作表移动到另一个工作表(在这种情况下,当Col17 =“是”时它是onEdit)。我正在选择要移动的数据:

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

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

当我的目的地工作表为空时,这非常有效。

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

E.g。我在细胞B1,A2和A3中有1,2,3,然后在细胞B1,B2,B3,B4和B5中有A,B,C,D,E。我运行我的脚本。新数据被插入A6(第一个完全空行)。我想要它去A4(Col A的第一个空行)。

3 个答案:

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

答案 1 :(得分:0)

我厌倦了getLastRow函数 - 每当我提供一个范围时,getLastRow也只返回范围中的行数,而不是包含数据的数字。

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

答案 2 :(得分:0)

考虑到你的数据好像是

A1 B1
A2 B2
A3 B3
   B4
   B5

.getLastRow()的预期响应将为5,因为其中包含数据的最后一行是B列中的第5行。请考虑您正在处理工作表。此功能现在无法让您查看最后一个条目在A列的具体位置。相反,您可以使用array = getRange('A:A').getValues(),将值添加到第一个空数组索引并使用getRange('A:A').setValues(array)更新列