根据单元格内容移动 excel 行

Move excel row based on cell content

我有一个 excel sheet,我想将整行移动到另一个 sheet 并根据单元格内容将其从原始行中删除 这是我的代码:

function onEdit(event) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s =event.source.getActiveSheet();
var r =event.source.getActiveRange();
if(s.getName()=="Main" && r.getColumn ()== 7&& r.getValue () == "Completed"){
var row =r.getRow();
var numColumns= s.getLastcolumn();
var targetsheet= ss.getSheetByName("Completed");
var target=targetSheet.getRange(targetSheet.getLastRow()+ 1, 1);
s.getRange( row, 1, 1, numColumns).moveTo(target);
s.deleteRow(row);
}
if(s.getName () == "Main" && r.getColumn () == 7 && r.getValue () == "Pending"){
var row =r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Pending");
var target = targetSheet.getRange( targetSheet.getlastRow ()+ 1, 1);
s.getRange( row, 1, 1, numColumns).moveTo(target);
s.deleteRow( row);
}
if(s.getName ()=="Main" && r.getColumn ()==7 && r.getValue () == "Hold") {
var row= r.getRow( );
var numcolumns =s.getLastColumn()
var targetSheet=ss.getSheetByName("Hold" );
var target = targetSheet.getRange(targetSheet.getLastRow()+ 1, 1);
s.getRange(row ,1,1,numColumns).moveTo(target);
s.deleteRow(row);
}
}

我正在尝试编辑 onEidit 函数但是这段代码对我不起作用 这是“主要”sheet

描述

我根据自己的喜好简化了您的脚本。这对我有用。您必须小心确保在第 7 列中键入正确的 sheet 名称。我会使用数据验证下拉列表来防止拼写错误。

脚本

function onEdit(event) {
  try {
    let sheets = ["Completed","Pending","Hold"];
    let spread = event.source;
    let source = event.range.getSheet();
    if( source.getName() === "Main" ) {
      if( event.range.getColumn() === 7 ) {
        if( sheets.indexOf(event.value) < 0) return;
        let row = event.range.getRow();
        let numColumns = source.getLastColumn();
        let target = spread.getSheetByName(event.value);
        target = target.getRange(target.getLastRow()+1,1);
        source.getRange(row,1,1,numColumns).moveTo(target);
        source.deleteRow(row)
      }
    }
  }
  catch(err) {
    console.log(err);
  }
}

参考