'Copying partial rows based on cell value

Trying to make any problem that is on the problem solving section list as "done", be copied and pasted below, then deleted from the section above.

Link to test board. https://docs.google.com/spreadsheets/d/16DvlVFnV_yw68LYHltHZ1TIDEaKVLEmLbpty5Te2O4o/edit#gid=0

I've tried several ways on my own, but always get stopped at .getRow() value being recognized as a string within the .getRange() syntax. Please just scrap my code completely if you want, I would appreciate any help. Thank you.

function onEdit(e) {
  var spreadsheet = SpreadsheetApp.getActive();
  var cellRange = spreadsheet.getActiveCell();
  var selectedColumn = cellRange.getColumn();
  var selectedRow;
  selectedRow = cellRange.getRow();
  var status;
  status = cellRange.getValue();
  
  Logger.log(`selectedColumn: ${selectedColumn}`); //These were just so I could maybe better understand the problem
  Logger.log(`selectedRow: ${selectedRow}`);
  Logger.log(`selected cell vale: ${cellRange.getValue()}`);
  Logger.log(`selected status: ${status}`);


  if(status === "Done"){
    selectedRow = cellRange.getRow();
    spreadsheet.getActiveSheet().insertRowsAfter(18 , 1);
    spreadsheet.getRange(r[selectedRow],c[4],5);

    spreadsheet.getRange(range).copyTo('19:19', SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
    spreadsheet.getActiveSheet().hideRows(spreadsheet.getActiveRange().getRow(), spreadsheet.getActiveRange().getNumRows());
    spreadsheet.getRange('19:19').activate();
  }
}


Solution 1:[1]

Copy rows when status equals done to done sheet

function onEdit(e) {
  const sh = e.range.getSheet();
  if(sh.getName() == "Sheet Name" && e.range.columnnStart == 7 && e.range.rowStart > 2 && e.value == "Done") {
    const tsh = e.source.getSheetByName('DoneSheet');//it was not clear to me what you wanted so I copy the done row to the done sheet
    sh.getRange(e.range.rowStart,1,1,sh.getLastColumn()).copyTo(tsh.getRange(tsh.getLastRow() + 1,1));
    sh.deleteRow(e.range.rowStart);
  }
}

an Onedit to copy and delete all dones

function updateEntireSheet(e) {
  const sh = e.range.getSheet();
  if(sh.getName() == "Sheet Name" && e.range.columnnStart == 7 && e.range.rowStart > 2 && e.value == "Done") {
    const tsh = e.source.getSheetByName('DoneSheet');//it was not clear to me what you wanted so I copy the done row to the done sheet
    let d = 0;
    let a = [];
    sh.getRange(3,1,sh.getLastRow() - 2,sh.getLastColumn()).getValues().forEach((r,i) => {
      if(r[6] == "Done" ) {
        a.push(r);
        sh.deleteRow(i + 3 - d++);
      }
    });
    tsh.getRange(tsh.getLastRow() + 1,1,a.length,a[0].length).setValues(a);
  }

}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1