I know this has been asked before because I have spent the last 5 hours trying them all from here and even the closed google product forum. I can\'t get any of the loops to
I don't really agree with user1795832's answer as it doesn't make use of batch writing but simply writes data to sheet 2 each time the condition is true... so why using an array to do that ?
Try simply to batch write to sheet 2 after the loop is completed and it should work as expected.
function runReportAllMemCos1() {
var sheet1 = sskey.getSheetByName('Businesses');
var sheet2 = sskey.getSheetByName('tempsheet');
var data = sheet1.getRange(1,1, sheet1.getLastRow(), sheet1.getLastColumn()).getValues();
var dest = [];
for (var i = 0; i < data.length; i++ ) {
Logger.log(data[i][12]);// just to check if the condition is true sometimes ;-)
if (data[i][12] == "Associate") {
dest.push(data[i]);
}
} // here is the end of the for loop
Logger.log(dest) ; // log the dest array instead
if (dest.length > 0 ) { // if something has been written in your array then batch write it to the dest. sheet
sheet2.getRange(sheet2.getLastRow()+1,1,dest.length,dest[0].length).setValues(dest);
}
}
EDIT : other possibility following your comment to choose the columns you copy
function runReportAllMemCos1() {
var sheet1 = sskey.getSheetByName('Businesses');
var sheet2 = sskey.getSheetByName('tempsheet');
var data = sheet1.getRange(1,1, sheet1.getLastRow(), sheet1.getLastColumn()).getValues();
var dest = [];
for (var i = 0; i < data.length; i++ ) {
Logger.log(data[i][12]);// just to check if the condition is true sometimes ;-)
if (data[i][12] == "Associate") {
var destRow = []; // initialise intermediate array
destRow.push(data[i][1],data[i][2],data[i][12]);// choose here the columns you want to add (here col2, 3 & 13)
dest.push(destRow);
}
} // here is the end of the for loop
Logger.log(dest) ; // log the dest array instead
if (dest.length > 0 ) { // if something has been written in your array then batch write it to the dest. sheet
sheet2.getRange(sheet2.getLastRow()+1,1,dest.length,dest[0].length).setValues(dest);
}
}
Yep, the problem is your dest variable. You aren't resetting it after each loop, so each row just keeps getting compounded in there and duplicates each time (so when looping through the third row, rows 1 and 2 are still in the dest variable). Put "dest = [];" just inside your for loop and it'll work.
function runReportAllMemCos1() {
var sheet1 = sskey.getSheetByName('Businesses');
var sheet2 = sskey.getSheetByName('tempsheet');
var data = sheet1.getRange(1,1, sheet1.getLastRow(), sheet1.getLastColumn()).getValues();
var dest = [];
for (var i = 0; i < data.length; i++ ) {
dest = [];
if (data[i][12] == "Associate") {
dest.push(data[i]);
} Logger.log(data)
if (dest.length > 0 ) {
sheet2.getRange(sheet2.getLastRow()+1,1,dest.length,dest[0].length).setValues(dest);
}
}
}