I have a spreadsheet with lots of data in one worksheet. In order to reduce clutter, I have written a function that will look for rows with dates older than the current date, copy them to a worksheet name Backup and delete the entry from the current worksheet.
My fxn is shown below. When I call it, it copies about half of the data. I have to run it several times, before it empties my worksheet. And when it does it does not write the last value into the target worksheet.
I would appreciate any pointers to improve my function.
function movePros() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var TZ = CalendarApp.openByName(ss.getSheetByName("Templates").getRange("E1").getValue()).getTimeZone();
var date = Utilities.formatDate(new Date(), TZ, "MM/dd/yyyy HH:mm:ss");
var dataSheet = ss.getSheetByName("Put your events here");
var targetSheet = ss.getSheetByName("Archive");
var dataRange = dataSheet.getRange(2, 1, dataSheet.getMaxRows(), dataSheet.getMaxColumns());
var count = 0;
// Create one JavaScript object per row of data.
objects = getRowsData(dataSheet, dataRange);
var res = objects.length;
for (var i = 0; i < objects.length; ++i) {
var rowData = objects[i];
var tmp = Utilities.formatDate(rowData.endDate, TZ, "MM/dd/yyyy HH:mm:ss");
var last_row = targetSheet.getLastRow();
targetSheet.insertRowAfter(last_row);
var target_range = targetSheet.getRange("A"+(last_row+1)+":H"+(last_row+1));
//Browser.msgBox("The length is " + rowData.eventId.length );
if ((tmp.valueOf() < date.valueOf() ) && (tmp.valueOf().length > 3)){
//Browser.msgBox(rowData.eventId);
var source_range = dataSheet.getRange("A"+(i+2)+":H"+(i+2));
source_range.copyTo(target_range);
count++;
dataSheet.deleteRow(i+2);
SpreadsheetApp.flush();
}
}
ss.toast(count + " rows copied", "Feedback", 5);
}
1 Answer