【发布时间】:2022-02-02 22:41:10
【问题描述】:
这是一个 Google Apps 脚本,用于从模板和 Google 电子表格中的值创建 Google 文档。
它从您的 Google 电子表格中的活动行(具有突出显示的单元格或行的行)中获取字段,并使用 Google 文档模板(由 TEMPLATE_ID 标识)创建一个文档,其中这些字段替换模板中的占位符。占位符通过在它们周围有 % 来标识,例如%姓名%。它使用工作表中创建的自定义“创建文档”菜单运行。
现在,我的问题是,如果我还有一张带有普通占位符的表格(请参见图片或链接),如果我在文档模板中也放置了占位符 %Table 1% ,我该如何继续?
在这种情况下,占位符 %Name%、%Surname%、%Fruit% 必须仅从第二行获取值。占位符 %Table 1% 必须取值直到表的末尾(第 5 行)。
https://docs.google.com/spreadsheets/d/1l3bCuyRnz_ylMHMfhbRC-_L5bLkWwEkrzGKgy46Kvnk/edit?usp=sharing
function myfunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var TEMPLATE_ID = 'xxx';
//var TEMPLATE_ID = ss.getRange("TEMPLATEID").getValue();
var ui = SpreadsheetApp.getUi();
if (TEMPLATE_ID === '') {
SpreadsheetApp.getUi().alert('TEMPLATE_ID needs to be defined in code.gs')
return
}
var copyFile = DriveApp.getFileById(TEMPLATE_ID).makeCopy(),
copyId = copyFile.getId(),
copyDoc = DocumentApp.openById(copyId)
var docFile = DriveApp.getFileById(copyFile.getId()); // Get Document as File
var FILE_NAME = ui.prompt('Insert file name:', ui.ButtonSet.OK);
FILE_NAME.getSelectedButton() == ui.ButtonSet.OK
copyDoc.setName(FILE_NAME.getResponseText())
var copyBody = copyDoc.getActiveSection(),
activeSheet = SpreadsheetApp.getActiveSheet(),
numberOfColumns = activeSheet.getLastColumn(),
activeRowIndex = activeSheet.getActiveRange().getRowIndex(),
activeRow = activeSheet.getRange(activeRowIndex, 1, 1, numberOfColumns).getValues(),
headerRow = activeSheet.getRange(1, 1, 1, numberOfColumns).getValues(),
columnIndex = 0
for (;columnIndex < headerRow[0].length; columnIndex++) {
var nextValue = formatString(activeRow[0][columnIndex])
copyBody.replaceText('%' + headerRow[0][columnIndex] + '%', nextValue)
}
copyDoc.saveAndClose()
SpreadsheetApp.getUi().alert('File doc created!!')
}
【问题讨论】:
-
考虑到您通常只使用单行的数据,该表是单行,还是会占用这三列的所有数据行?
-
简单地说,就像在这种情况下,占位符 %Name%、%Surname%、%Fruit% 必须仅从第二行获取值。占位符 %Table 1% 必须取值直到表的末尾(第 5 行)。
标签: google-apps-script google-sheets google-docs placeholder