如何解决将 valuem 复制到 EmptyRow
function copyInfo() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var copySheet = ss.getSheetByName("WREQ");
var pasteSheet = ss.getSheetByName("Orders/Deliveries");
// get source range
var source = copySheet.getRange("A2:X");;
// get destination range
var destination = pasteSheet.getRange(pasteSheet.getLastRow()+1,3,1,1);
// copy values to destination range
source.copyTo(destination);
copySheet.deleteRows(2,source.getNumRows())
}
它从WREQ
表复制A2:X中的信息并将其粘贴到从c列开始的Orders/Deliveries
表的最后一行+1。问题在于,在 pasteSheet.getRange(pasteSheet.getLastRow()+1,1);
上,它实际上抓取了最后一个空行,并且由于我在 Orders/Deliveries A、B 列(用于控制)上有公式和复选框,因此脚本可以理解该行是不是空的,然后去下一个,一般会往下走。
我希望它忽略 A、B 列,因为它们是控制列,并检查最后一行是否从 C 列开始,如果 C 为空,则粘贴数据并继续执行脚本的其余部分。
不确定如何包含在此代码中,因为我在编码方面非常蹩脚。我正在考虑使用 isBlank,但不确定如何让它按照我想要的方式工作。
解决方法
- 如果数据中没有空白(C列),您可以尝试
var lastRow = pasteSheet.getRange("C:C").getValues().filter(String).length;
然后在下一行使用这个变量
var destination = pasteSheet.getRange(lastRow + 1,3,1,1);
- 如果数据范围中有间隙(空单元格),您可以创建一个辅助函数来计算列中的第一个空闲行(传递给函数的第二个参数)。
function findFirstFreeRow(sheet,colNum) {
var v = sheet.getRange(1,colNum,sheet.getLastRow()).getValues(),l = v.length,r;
while (l > 0) {
if (v[l] && v[l][0].toString().length > 0) {
r = (l + 2);
break;
} else {
l--;
}
}
return r;
}
然后调用该函数获取第一个空闲行
var destination = pasteSheet.getRange(findFirstFreeRow(pasteSheet,3),1);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。