- 您要从电子表格中检索值并将其放入模板文档中。
我有一个带有动态字段标签的Google文档,例如%Name%-%Date %%] >>>,它们从A和B列的Google表格中获取值: 工作表的屏幕截图
您可以看到前2列中的值相同,因此Google文档中的“%”标记没有问题,因为它采用了相同的值。问题出在其他列(C,D,E ...),其中Google工作表上的值是变量。
如何在Google文档中应用一个标记,该标记可动态获取带有变量值的全部整列的值?
<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9DUXdQcS5wbmcifQ==” alt =“文档截屏”>“ >>
预期结果:
我有一个带有动态字段标记的Google文档,例如%Name%-%Date of Birth%,它们从A和B列的google表格中获取值:表格的屏幕快照如您所见,...
john
和25/05/1998
,“ A”和“ B”列的所有值都相同。%
括起来。我可以像上面那样理解。如果我的理解是正确的,那么这个答案呢?请认为这只是几个可能的答案之一。
此示例脚本的流程如下。
在运行脚本之前,请设置templateGoogleDocumentID
。
function myFunction() {
var templateGoogleDocumentID = "###"; // Please set the template Google Document ID.
// 1. Retrieve values from Spreadsheet.
var activeSheet = SpreadsheetApp.getActiveSheet();
var values = activeSheet.getDataRange().getValues();
// 2. Create an object for putting to Google Document.
var object = {headers: {}, table: {}};
var headerRow = values.shift();
object.headers[headerRow[0]] = values[0][0];
object.headers[headerRow[1]] = Utilities.formatDate(values[0][1], Session.getScriptTimeZone(), "yyyy/MM/dd");
object.table = values.map(r => r.splice(2, 5));
// 3. Copy a template Google Document.
var copiedTemplateDoc = DriveApp.getFileById(templateGoogleDocumentID).makeCopy();
var docId = copiedTemplateDoc.getId();
// 4. Put the header values to the copied Document using the object.
var doc = DocumentApp.openById(docId);
var body = doc.getBody();
Object.keys(object.headers).forEach(h => body.replaceText(`%${h.toLowerCase()}%`, object.headers[h]));
// 5. Put the table values using the object.
// If the table rows of Google Document are less than that of Spreadsheet, the rows are added.
var table = body.getTables()[0];
var r = object.table.length - table.getNumRows();
if (r > 0) {
for (var i = 0; i < r; i++) {
var tr = table.appendTableRow();
for (var j = 0; j < 3; j++) {
tr.appendTableCell();
}
}
}
object.table.forEach((row, i) => (row.forEach((col, j) => (table.getCell(i, j).setText(col)))));
doc.saveAndClose();
// If you want to export the Google Document as PDF file, please use the following script.
// var newFile = DriveApp.createFile(doc.getBlob());
}