'Dynamic File Name form Google Sheet
With this script I can generate a google document taking some information from google sheet.
Actually there is the function for the name of the file with a popup where a user put the file name.
I would to avoid this, giving to the doc generated, automatically the file name with this logic:
The value in A2 (in the tab named "General") + the word "Contract".
How could I proceed?
function CheckList() {
var tableColumn = [59,61]; //
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var TEMPLATE_ID = 'xxx';
var ui = SpreadsheetApp.getUi();
if (TEMPLATE_ID === '') {
ui.alert('TEMPLATE_ID needs to be defined in code.gs')
return
}
var copyFile = DriveApp.getFileById(TEMPLATE_ID).makeCopy();
var copyId = copyFile.getId();
var copyDoc = DocumentApp.openById(copyId);
var FILE_NAME = ui.prompt('Inserisci il nome della Checklist:', ui.ButtonSet.OK);
copyDoc.setName(FILE_NAME.getResponseText());
var copyBody = copyDoc.getBody();
var lastColumn = sheet.getLastColumn();
var activeRowIndex = sheet.getActiveRange().getRowIndex();
var activeRow = sheet.getRange(activeRowIndex, 1, 1, lastColumn).getDisplayValues()[0];
var headerRow = sheet.getRange(1, 1, 1, lastColumn).getDisplayValues()[0];
for (var columnIndex = 0; columnIndex < headerRow.length; columnIndex++) {
if (columnIndex === tableColumn[0] - 1) { // Check if column corresponds to table data
try {
var tableValues = sheet.getRange(2, tableColumn[0], sheet.getLastRow()-1,tableColumn[1]-tableColumn[0]+1).getDisplayValues();
var placeholder = `%${headerRow[tableColumn[0]-1]}%`;
var rangeElement = copyBody.findText(placeholder);
var element = rangeElement.getElement();
console.log(element.asText().getText())
var childIndex = copyBody.getChildIndex(element.getParent());
console.log(childIndex)
const elementText = copyBody.getChild(childIndex).asText().getText();
const [beforeText, afterText] = elementText.split(placeholder);
copyBody.getChild(childIndex).asText().setText('');
copyBody.insertParagraph(childIndex, beforeText);
copyBody.insertTable(childIndex+1, tableValues).setColumnWidth(0, 270).setColumnWidth(1, 90).setColumnWidth(2, 90);
copyBody.insertParagraph(childIndex+2, afterText);
} catch(err) {
continue;
}
} else if (columnIndex < tableColumn[0] - 1 || columnIndex > tableColumn[1] - 1) {
var nextValue = formatString(activeRow[columnIndex]);
copyBody.replaceText('%' + headerRow[columnIndex] + '%', nextValue);
}
}
copyDoc.saveAndClose();
var url = "https://docs.google.com/document/d/"+ copyId +"";
var htmlString = "<base target=\"_blank\">" +
"<h2><a href=\"" + url + "\">Apri il documento creato!</a></h2>" +
"<p align=center><img src='' /></p>";
var html = HtmlService.createHtmlOutput(htmlString)
.setHeight(600)
.setWidth(600);
SpreadsheetApp.getUi().showModalDialog(html, 'Non mollare!')
}
Solution 1:[1]
I have solved myself:
var company = sheet.getRange('General!A2').getDisplayValue();
var FILE_NAME = company + " - " + "Contract";
copyDoc.setName(FILE_NAME);
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Gavis |
