我有一个脚本,该脚本通过将标头映射到模板文档中列出的标签(即<< \ tag name >>)将电子表格数据合并到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和id写回到工作表中
var link = newDoc.getUrl();
dataSheet.getRange(i+1,docCol+1).setValue(link);
dataSheet.getRange(i+1,docIdCol+1).setValue(template);
}
}
}
当我手动运行脚本时,数据合并没有任何问题,并创建了一个文档,但是当我将其附加到触发器(在表单提交时)时,它会创建重复的文档,我不知道为什么。我们非常感谢您提供的任何帮助,当然,也欢迎任何可以改善代码及其性能的建议!