Skip to content

Instantly share code, notes, and snippets.

@cashweaver-zz
Created December 8, 2016 19:30
Show Gist options
  • Save cashweaver-zz/18bac71b28d1e6a7e95babff33726c82 to your computer and use it in GitHub Desktop.
Save cashweaver-zz/18bac71b28d1e6a7e95babff33726c82 to your computer and use it in GitHub Desktop.
Cover Letter Customizer (Google App Script)
/*
* Reference:
* - https://developers.google.com/apps-script/guides/html/templates
* - https://developers.google.com/apps-script/guides/html/
* - https://developers.google.com/apps-script/guides/dialogs#custom_sidebars
* - https://developers.google.com/apps-script/reference/document/body#replacetextsearchpattern-replacement
*/
function customizeAndDownloadPDF(form) {
var ui = DocumentApp.getUi();
var doc = DocumentApp.getActiveDocument();
var activeDocumentId = doc.getId();
var file = DriveApp.getFileById(activeDocumentId);
// I have a directory below the directory my Master Cover Letter is in named Cover Letters.
// You may have a different folder structure. Reference the documentation!
// https://developers.google.com/apps-script/reference/drive/folder#getfoldersbynamename
var coverLetterFolder = DriveApp.getFoldersByName('Cover Letters').next();
// Clone the document
var clonedDocId = file.makeCopy(form.companyName + ' Cover Letter', coverLetterFolder).getId();
// Update the document
var clonedDoc = DocumentApp.openById(clonedDocId);
var body = clonedDoc.getBody();
body.replaceText('COMPANY_NAME', form.companyName);
body.replaceText('SPECIFIC_NAME', form.addressee);
body.replaceText('WHERE_I_FOUND_THE_JOB', form.jobDiscovery);
body.replaceText('LINK_TO_JOB_POSTING', form.jobLink);
body.replaceText('WHY_I_LIKE_THE_COMPANY. EXPRESS_EXCITEMENT.', form.companySpecific);
clonedDoc.saveAndClose();
// Reopen the document after saveAndClose()
clonedDoc = DocumentApp.openById(clonedDocId);
saveAsPDF(clonedDoc, clonedDoc.getName() + '.pdf', coverLetterFolder);
ui.alert('Your new cover letter is ready.', ui.ButtonSet.OK);
}
function saveAsPDF(document, fileName, folder) {
var pdfBlob = document.getAs('application/pdf');
pdfBlob.setName(fileName);
var pdf = DriveApp.createFile(pdfBlob);
folder.addFile(pdf);
}
function onOpen() {
// Adds the menu item which activates this script when your document loads
DocumentApp.getUi()
.createMenu('Customize')
.addItem('Customize Cover Letter', 'showSidebar')
.addToUi();
}
function showSidebar() {
var html = HtmlService.createHtmlOutputFromFile('sidebar')
.setTitle('Customize Cover Letter')
.setWidth(300);
DocumentApp.getUi()
.showSidebar(html);
}
<!DOCTYPE html>
<html>
<head>
<base target="_top">
<style>
* {
font-family: Arial, sans-serif;
box-sizing: border-box;
}
.form-component {
margin-bottom: 15px;
}
.form-component label {
display: block;
margin-bottom: 8px;
}
.form-component input,
.form-component textarea {
display: block;
width: 100%;
padding: 3px;
}
input[type="button"] {
margin-top: 20px;
}
.info {
color: #666;
font-size: 0.8rem;
}
</style>
</head>
<body>
<form>
<div class="form-component">
<label>Company Name</label>
<input type="text" placeholder="Company Name" name="companyName" />
</div>
<div class="form-component">
<label>Addressee</label>
<input type="text" placeholder="Addressee" name="addressee" />
</div>
<div class="form-component">
<label>How you found the job</label>
<input type="text" placeholder="How you found the job" name="jobDiscovery" />
</div>
<div class="form-component">
<label>Job post link</label>
<input type="text" placeholder="Job post link" name="jobLink" />
</div>
<div class="form-component">
<label>Company specific</label>
<textarea placeholder="Explain why you like the company. Express excitement!" name="companySpecific" rows="5"></textarea>
</div>
<p class="info">The current Doc will be cloned, renamed, edited, and saved as a PDF.</p>
<p class="info">The script takes a few seconds to run because creating/saving new documents is apparently a slow process. A dialog window will pop up to let you know when the script has completed.</p>
<input type="button" value="Customize and Download PDF" onclick="google.script.run.customizeAndDownloadPDF(document.forms[0])" />
</form>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment