I've been building complex document assembly systems since dinosaurs roamed the earth. And by dinosaurs, I mean, 286 computers running Word for DOS 4.0.
This is a simple, but effective, method in Google Apps Script to generate multiple PDF contracts in a matter of seconds.
I provide the code below. In this video, I go through the code line-by-line to explain the logic and features.
VIDEO: CODE WALK THRU
GOOGLE APP SCRIPT CODE EXAMPLE
You will have to replace the template and folder Id's with those from your Google Drive and documents.
function generateContracts() {
const contractorSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Contractor Agreements"); //enter whatever you name your sheet here.
const contractData = contractorSheet.getDataRange().getDisplayValues();
const contractTemplate = DriveApp.getFileById("get-your-document-template-id-from-url");
const contractFolder = DriveApp.getFolderById("get-your-folder-id-from-url");
let contractDate = new Date();
const filePrefix = contractDate.getFullYear() + "-" + String(contractDate.getMonth()).padStart(2,"0") + " - ";
for (let i = 0; i < contractData.length; i++) {
if (contractData[i][0] == "Y") {
let myDoc = contractTemplate.makeCopy(filePrefix + contractData[i][1]);
let newDoc = DocumentApp.openById(myDoc.getId());
let docBody = newDoc.getBody();
docBody.replaceText("{{" + contractData[0][1] + "}}", contractData[i][1]);
docBody.replaceText("{{" + contractData[0][2] + "}}", contractData[i][2]);
docBody.replaceText("{{" + contractData[0][3] + "}}", contractData[i][3]);
newDoc.saveAndClose();
myDoc.moveTo(contractFolder);
let docPdf = myDoc.getAs('application/pdf');
contractFolder.createFile(docPdf).setName(filePrefix + contractData[i][1] + ".pdf");
}
}
}