У меня есть скрипт, который объединяет данные электронной таблицы в документ Google, сопоставляя заголовки с тегами, которые я перечислил в шаблонном документе (т.е. << \ имя тега >>). Данные заполняются через форму Google и при отправке создают копию и объединяют данные.
У меня есть другой скрипт, который я использовал, где я сопоставляю каждый тег по отдельности, но это отнимает много времени и надеется получить что-то более динамичное (без использования надстройки, если это возможно).
function documentMerge() {
var templateId = "<id>";
var folderId = "<id>";
var dataSheet = SpreadsheetApp.openById("<id>").getSheetByName("Form Responses 1");
var dataRange = dataSheet.getRange(1, 1, dataSheet.getLastRow(), dataSheet.getLastColumn()).getValues();
var headers = dataRange[0];
var docCol = headers.indexOf('Document Link');
var docIdCol = headers.indexOf('Document ID');
var firstNameCol = headers.indexOf('First Name');
var lastNameCol = headers.indexOf('Last Name');
var locCol = headers.indexOf('Location');
for (var i = 0; i < dataRange.length; i++) {
var currentData = dataRange[i];
Хотите создать документ, только если он еще не существует
if(currentData[docCol] === "") {
// Generate copy
var name = currentData[lastNameCol]+", "+currentData[firstNameCol]+" ("+currentData[locCol]+") - NVCHS Promotion Request";
var template = DriveApp.getFileById(templateId)
.makeCopy(name, DriveApp.getFolderById(folderId))
.getId();
var newDoc = DocumentApp.openById(template);
var newBody = newDoc.getBody();
for (var x = 0; x < currentData.length; x++) {
var tag = "<<"+ dataRange[0][x] +">>";
while (newBody.findText(tag) !== null) {
newBody.replaceText(tag, currentData[x]);
}
}
newDoc.saveAndClose();
Я хочу записать URL и идентификатор обратно на лист
var link = newDoc.getUrl();
dataSheet.getRange(i+1,docCol+1).setValue(link);
dataSheet.getRange(i+1,docIdCol+1).setValue(template);
}
}
}
Когда я запускаю сценарий вручную, данные объединяются без проблем и создают один документ, но когда я присоединяю его к триггеру (при отправке формы), он создает дубликаты документов, и я не могу понять, почему. Любая помощь приветствуется и, конечно, приветствуются любые предложения, которые могут улучшить код и его производительность!