'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 |
