根据单元格值通过邮件合并生成不同的 PDF - Google Sheets

问题描述 投票:0回答:1

我正在 Google Sheets 中运行 Apps 脚本来邮件合并并生成 PDF 文件,然后将该文件存储在云端硬盘中。

我有以下变量,用于存储 Google 文档,该文档用作正在生成的新 PDF 的模板。

var GDOC_TEMPLATE_ID = '1olnBowCh-1apK3jWN-Lr2Ty3UT1NK_dmoJOVBjnzgO8'

我想要一个函数来修改此变量的值,以便它可以指向不同的文件。

我一直在尝试做的是以下脚本,但根本没有完成:

  • 如果“所选行第N列单元格为空,则使用此文件,如果单元格不为空,则更改为不同的文件ID。

注意:我的邮件合并脚本通过选择行运行并从所选行获取所有占位符,因此当其中一个字段为空时,我尝试指向更适合的不同模板。

这是正在使用的脚本,它在 GitHub 中公开,并且包含该过程每个部分的说明

谢谢

google-apps-script google-sheets mailmerge
1个回答
0
投票

我相信您的目标如下。

  • 您正在使用https://gist.github.com/lcenchew/5bb4f7f23a159d66dc9a14f38d222fcf的脚本。
  • 在您的脚本中,首先,它选择一个单元格。并且,运行脚本。这样,所选单元格的行将用作值。
  • 在此情况下,当“N”列的值为空时,您希望使用
    1olnBowCh-1apK3jWN-Lr2Ty3UT1NK_dmoJOVBjnzgO8
    的文件ID作为
    GDOC_TEMPLATE_ID
    。当“N”列的值不为空时,您想使用另一个文件ID作为
    GDOC_TEMPLATE_ID

既然如此,下面的修改如何?请修改

getSheetData()
如下。

来自:

function getSheetData() {
  
  copyFile = DriveApp.getFileById(GDOC_TEMPLATE_ID).makeCopy()
  var copyId = copyFile.getId()
  copyDoc = DocumentApp.openById(copyId)
  copyBody = copyDoc.getActiveSection()
  var activeSheet = SpreadsheetApp.getActiveSheet()
  var numberOfColumns = activeSheet.getLastColumn()
  activeRowIndex = activeSheet.getActiveRange().getRowIndex()
  var activeRowRange = activeSheet.getRange(activeRowIndex, 1, 1, numberOfColumns)
  activeRowValues = activeRowRange.getDisplayValues()
  headerRow = activeSheet.getRange(1, 1, 1, numberOfColumns).getValues()
}

致:

请将

### other ID ###
替换为您的文件 ID。

function getSheetData() {
  var activeSheet = SpreadsheetApp.getActiveSheet()
  var numberOfColumns = activeSheet.getLastColumn()
  activeRowIndex = activeSheet.getActiveRange().getRowIndex()
  var activeRowRange = activeSheet.getRange(activeRowIndex, 1, 1, numberOfColumns)
  activeRowValues = activeRowRange.getDisplayValues()
  headerRow = activeSheet.getRange(1, 1, 1, numberOfColumns).getValues()

  var templateIds = ['1olnBowCh-1apK3jWN-Lr2Ty3UT1NK_dmoJOVBjnzgO8', '### other ID ###'];
  GDOC_TEMPLATE_ID = templateIds[activeRowValues[0][13] ? 1 : 0];

  copyFile = DriveApp.getFileById(GDOC_TEMPLATE_ID).makeCopy()
  var copyId = copyFile.getId()
  copyDoc = DocumentApp.openById(copyId)
  copyBody = copyDoc.getActiveSection()
}
  • 通过此修改,当所选单元格所在行的“N”列值为空时,
    1olnBowCh-1apK3jWN-Lr2Ty3UT1NK_dmoJOVBjnzgO8
    用作
    GDOC_TEMPLATE_ID
    。当“N”列的值不为空时,使用另一个文件 ID
    ### other ID ###
    作为
    GDOC_TEMPLATE_ID
© www.soinside.com 2019 - 2024. All rights reserved.