From ebf76d265382440b7df7681d30072aedc6af339a Mon Sep 17 00:00:00 2001 From: Adam Goldsmith Date: Tue, 17 Mar 2020 18:27:50 -0400 Subject: [PATCH] Create real output document and PDF --- Code.ts | 57 +++++++++++++++++++++++++++++++++++---------------- tsconfig.json | 9 ++++++++ 2 files changed, 48 insertions(+), 18 deletions(-) create mode 100644 tsconfig.json diff --git a/Code.ts b/Code.ts index 73f83d9..6d99526 100644 --- a/Code.ts +++ b/Code.ts @@ -43,32 +43,49 @@ function copyBody( } } +function spreadsheetRowToObject( + sheet: GoogleAppsScript.Spreadsheet.Sheet, + rownum: number +): { [key: string]: any } { + // TODO: could be more efficient + const values = sheet.getDataRange().getValues(); + const headers = values[0]; + const row_data = values[rownum - 1]; + + return headers.reduce((acc, header, index) => { + acc[String(header)] = row_data[index]; + return acc; + }, {}); +} + function generateForCurrentRow() { - const template = DocumentApp.openById( - '1V0uMuM80BGpjpdt1AmuzlU97tDI_u-y2rOfdl4tkqmc' - ); const spreadsheet = SpreadsheetApp.getActive(); const cell = spreadsheet.getCurrentCell(); if (!cell) throw new Error('No Cell selected for operation on row'); - const source_doc = DocumentApp.openById( - '1tB9--ilbfDixuQAEMk0_D6KqNFToQzs-au6NiotCH5M' + const row = spreadsheetRowToObject( + spreadsheet.getActiveSheet(), + cell.getRow() ); - const out_doc = template; // TODO: make a copy of template, and write to that + + const source_doc = DocumentApp.openById(row['Document ID']); + + const template_file = DriveApp.getFileById(row['Template ID']); + const out_folder = DriveApp.getFolderById( + '1ROyJXk-QANTHM6Jiw0ne3EQiR1f2UsLr' + ); + + const out_file = template_file.makeCopy( + row['Document Name'] + row['Version'], + out_folder + ); + const out_doc = DocumentApp.openById(out_file.getId()); // do text replacement - // TODO: could be more efficient - const values = spreadsheet - .getActiveSheet() - .getDataRange() - .getValues(); - const headers = values[0]; - const row = values[cell.getRow() - 1]; - - headers.forEach((header, index) => { - out_doc.getBody().replaceText(`{{${header}}}`, String(row[index])); - out_doc.getHeader().replaceText(`{{${header}}}`, String(row[index])); - out_doc.getFooter().replaceText(`{{${header}}}`, String(row[index])); + Object.entries(row).forEach(([header, data]) => { + out_doc.getBody().replaceText(`{{${header}}}`, String(data)); + out_doc.getHeader().replaceText(`{{${header}}}`, String(data)); + out_doc.getFooter().replaceText(`{{${header}}}`, String(data)); }); const insert_point = out_doc @@ -90,4 +107,8 @@ function generateForCurrentRow() { // insert with index 0 is an append, for some reason copyBody(source_doc.getBody(), out_doc.getBody(), index + 1); out_doc.getBody().removeChild(parent); + out_doc.saveAndClose(); + + // create PDF file + out_folder.createFile(out_file.getAs('application/pdf')); } diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..beb4890 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": ["es2017"], + "strict": true, + "module": "es2015", + "moduleResolution": "node" + } +}