Home > Software engineering >  Function Keeps Looping After Last Row
Function Keeps Looping After Last Row

Time:12-03

I am using the following code to fill a Google Docs template with data pulled from a spreadsheet.

function createBulkMembershipCards() {

const template = DriveApp.getFileById("--------");
const docFolder = DriveApp.getFolderById("----------");
const pdfFolder = DriveApp.getFolderById("----------------");
const libroSoci = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("LibroSoci");

const data = libroSoci.getRange(352, 1, libroSoci.getLastRow()-1,19).getDisplayValues();

data.forEach(row => {
  
  createMembershipCard (row[3],row[4],row[0],row[1], row[6],template,docFolder,pdfFolder);
  
});

}

function createMembershipCard (name,surname,msnumber,timestamp, email,template,docFolder,pdfFolder) {

const file = template.makeCopy(docFolder);
const docFile = DocumentApp.openById(file.getId());
const body = docFile.getBody();

body.replaceText("{name}", name);
body.replaceText("{surname}", surname);
body.replaceText("{msnumber}", msnumber);
body.replaceText("{timestamp}", timestamp);
body.replaceText("{email}", "<<" email ">>");
docFile.saveAndClose();

docFile.setName(msnumber " " name " " surname);

const pdfBlob = docFile.getAs(MimeType.PDF);
pdfFolder.createFile(pdfBlob).setName(msnumber " " name " " surname);

}

I do not understand why, even though I used "getLastRow", the function keeps going on indefinitely after the last populated row.

Please not that I put 352 as the starting row because I want to extract data from that row on.

Is anyone able to help?

Thank you!

CodePudding user response:

Let's say getLastRow() returns 1000. Then you are getting 999 rows. What you want is 1000-351 rows.

Change

const data = libroSoci.getRange(352, 1, libroSoci.getLastRow()-1,19).getDisplayValues();

To

const data = libroSoci.getRange(352, 1, libroSoci.getLastRow()-351,19).getDisplayValues();
  • Related