一旦第 1 行具有特定值,如何将列移动到新的 sheet?

How can I move a column to a new sheet once row 1 has a certain value?

我使用此处发布的代码根据列的值移动行,但我想对其进行编辑以使其执行相反的操作:将列移动到新的 sheet 基于一行的值。 这是我目前所拥有的:

function onEdit(event) {
  // source data in sheet named Blocks
  // sheet column is moved to named Ordered
  // test row with word "Done" is row 1
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();

  if(s.getName() == "Blocks" && r.getRow() == 1 && r.getValue() == "Done") {
    var column = r.getColumn();
    var numRows = s.getLastRow();
    var targetSheet = ss.getSheetByName("Ordered");
    var target = targetSheet.getRange(targetSheet.getLastColumn() + 1, 1);
    s.getRange(column, 1, 1, numRows).copyTo(target);
    s.deleteColumn(column);
  }
}

问题是,当我测试它时,它只移动了该列的第一行。我希望它移动整个列,然后从原来的 sheet.

中删除它

谁能告诉我哪里错了?

移动选定的列

function onEdit(e) {
  //e.source.toast('Entry');
  var sh = e.range.getSheet();
  if(sh.getName() == "Blocks" && e.range.rowStart == 1 && e.value == "Done") {
    //e.source.toast('Ordered1')
    var tsh = e.source.getSheetByName("Ordered");
    var target = tsh.getRange(1,tsh.getLastColumn() + 1);
    sh.getRange(2, e.range.columnStart, sh.getLastRow() -1).copyTo(target);
    sh.deleteColumn(e.range.columnStart);
  }
}

我在第一行使用了 Active/Done 数据验证,我只从第二行移动到最后一行,然后删除了包括验证单元格在内的整个列。