Checked Box Going to Top of New Sheet (Apps Script)

40 views
Skip to first unread message

Corbin Dean

unread,
Feb 12, 2025, 11:34:10 AM2/12/25
to Google Apps Script Community
I currently have this apps script running where if a box is checked then it will delete the row and import it to a new sheet. Right now it imports to the bottom of the new sheet and then when unchecked it will import to the bottom of the original sheet. Is it possible to have it import to the top of the sheet or row three (underneath the headers)?  I am not a programer so I'll need some handholding in your explanation. 

Here is the script: 

function onEdit (){
var mainSheet = "Todolist";
var sheetToMoveTheRow = "Completed";

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getActiveRange();

if(sheet.getName() == "Todolist" && range.getColumn() == 2 && range.getValue() == true) {
var row = range.getRow();
var numColumns = sheet.getLastColumn();
var targetSheet = ss.getSheetByName("Completed");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
sheet.getRange(row, 1, 1, numColumns).moveTo(target);
sheet.deleteRow(row);
} else if (sheet.getName() == "Completed" && range.getColumn() == 2 && range.getValue() == false) {
var row = range.getRow();
var numColumns = sheet.getLastColumn();
var targetSheet = ss.getSheetByName("Todolist");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
sheet.getRange(row, 1, 1, numColumns).moveTo(target);
sheet.deleteRow(row);
}
}

And here is the link to the sheet:

Brent Guttmann

unread,
Feb 12, 2025, 11:07:04 PM2/12/25
to Google Apps Script Community
function onEdit() {
    var mainSheet = "Todolist";
    var sheetToMoveTheRow = "Completed";

    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = SpreadsheetApp.getActiveSheet();
    var range = sheet.getActiveRange();

    if (sheet.getName() == mainSheet && range.getColumn() == 2 && range.getValue() == true) {
        moveRow(sheet, ss.getSheetByName(sheetToMoveTheRow));
    } else if (sheet.getName() == sheetToMoveTheRow && range.getColumn() == 2 && range.getValue() == false) {
        moveRow(sheet, ss.getSheetByName(mainSheet));
    }
}

function moveRow(sourceSheet, targetSheet) {
    var row = sourceSheet.getActiveRange().getRow();
    var numColumns = sourceSheet.getLastColumn();
    var data = sourceSheet.getRange(row, 1, 1, numColumns).getValues();

    // Insert a new row below the header (row 3)
    targetSheet.insertRowBefore(3);
    targetSheet.getRange(3, 1, 1, numColumns).setValues(data);

    sourceSheet.deleteRow(row);
}

// Or.....

function onEdit(e) {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = e.source.getActiveSheet();
    var range = e.range;
    var column = range.getColumn();
    var isChecked = range.getValue();
    
    var sheetsMap = { "Todolist": "Completed", "Completed": "Todolist" };
    
    if (column === 2 && sheetsMap[sheet.getName()] !== undefined) {
        moveRow(sheet, ss.getSheetByName(sheetsMap[sheet.getName()]));
    }
}

function moveRow(sourceSheet, targetSheet) {
    var row = sourceSheet.getActiveRange().getRow();
    var numColumns = sourceSheet.getLastColumn();
    var data = sourceSheet.getRange(row, 1, 1, numColumns).getValues();
    
    targetSheet.insertRowBefore(3); // Insert new row at row 3
    targetSheet.getRange(3, 1, 1, numColumns).setValues(data);
    
    sourceSheet.deleteRow(row);
}

Untested but should he fine.
Reply all
Reply to author
Forward
0 new messages