google-apps-script - 将行内容移动到 Google 表格中的下一个打开行
问题描述
我有两张表格,我将经常在它们之间移动数据。在 Sheet1 上,我拥有所有数据,并且复选框用于将相同的数据发送到 Sheet2。发送数据后,会留下空行,因此我知道在一天结束时重建工作表时可用的位置。
Sheet2 上的数据将被修改,在一天结束时,我想将所有内容移回 Sheet1,取第一个可用的空行。我的第一部分工作正常,但我似乎无法让数据移回 Sheet1 进入第一个可用的(空单元格)。
目前的问题是,当我取消选中该框以赋予该行的值为 false 时,数据将从 Sheet2 中删除,但未移动到 Sheet1 中。
这是我到目前为止所拥有的:
function onEdit(event) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.source.getActiveRange();
if(s.getName() == "Foss Test 2" && r.getColumn() == 4 && r.getValue() == true) {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Foss Test");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).moveTo(target);
} else if(s.getName() == "Foss Test" && r.getColumn() == 4 && r.getValue() == false) {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Foss Test 2");
var target = targetSheet.getRange(targetSheet.getDataRange().getHeight() + 1, 1)
targetSheet.appendRow(target.getValues()[0]);
s.deleteRow(row);
}
}
我觉得我的错误在else
块中,因为目前没有数据移回 Sheet1。
解决方案
尽管您没有定义“来源”一词,但我认为这就是您想要的。
function onEdit(e) {
e.source.toast('flag0');
var sh=e.range.getSheet();
if(sh.getName()=="Sheet1" && e.range.columnStart==4 && e.value=="TRUE") {
var targetSheet=e.source.getSheetByName("Sheet2");
var target=targetSheet.getRange(targetSheet.getLastRow() + 1,1);
sh.getRange(e.range.rowStart,1,1,sh.getLastColumn()).moveTo(target);
} else if(sh.getName()=="Sheet2" && e.range.columnStart==4 && e.value=="FALSE") {
var targetSheet=e.source.getSheetByName("Sheet1");
var vA=targetSheet.getDataRange().getValues();
for(var i=0;i<vA.length;i++) {
if(vA[i].join('').length==0) {
var target=targetSheet.getRange(i+1,1);
sh.getRange(e.range.rowStart,1,1,sh.getLastColumn()).moveTo(target);
break;
}
}
}
}
如果这不是你想要的,请告诉我。