简体   繁体   中英

Move row based on cell selection

I have a script that moves the whole row to a different tab and deletes it from the tab it was moved based on a "list" selection.

The script is the following:

    // Script Move & Delete
function onEdit(event) {
  // assumes source data in sheet named Needed
  // target sheet of move to named Acquired
  // test column with yes/no is col 4 or D
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();
  // In Review Trigger
  if(s.getName() == "Applied" && r.getColumn() == 1 && r.getValue() == "In Review") {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("In Review");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);
  }
  // In Review Trigger
  else if(s.getName() == "Applied" && r.getColumn() == 1 && r.getValue() == "Failed") {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("Failed");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);
  }

So for example, if the row on Tab "Applied" and value of cell on column 1 = In Review then the row is moved to tab "In Review" but if the value of cell on column one = to Failed then row is moved to tab Failed.

That part works like charm and I know having multiple tabs will have a lot of else ifs, I'm not much of a dev, so I was wondering how can I do to move the row if the status (Column 1) is changed to Applied is moved to tab one or failed tab if value is changed to failed?

Basically, move the rows between tabs based on value of column one of each row/tab.

Thanks in advance!

This worked for me:

function onMyEdit(e) {
  //e.source.toast('entry');
  const s = e.range.getSheet();
  if (s.getName() == "Sheet1" && e.range.columnStart == 1 && e.value) {
    //e.source.toast('cond')
    const names = ['Sheet2', 'Sheet3'];
    let idx = names.indexOf(e.value);
    if (~idx) {
      //e.source.toast('sheet');
      let tsh = e.source.getSheetByName(names[idx]);
      let tgt = tsh.getRange(tsh.getLastRow() + 1, 1);
      s.getRange(e.range.rowStart, 1, 1, s.getLastColumn()).moveTo(tgt);
      s.deleteRow(e.range.rowStart);
    }
  }
}

I made some name changes to make it easier for me to debug so look it over to make sure all of the sheet names are right for your needs.

If you require more complex functionality in moving rows, take a look at the moveRowsFromSpreadsheetToSpreadsheet_ script. It is unfortunately too long to quote here directly.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM