首页 > 解决方案 > 将行内容移动到 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。

标签: google-apps-scriptgoogle-sheets

解决方案


尽管您没有定义“来源”一词,但我认为这就是您想要的。

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;
      }
    }   
  }
}

如果这不是你想要的,请告诉我。


推荐阅读