首页 > 解决方案 > 如果以特定方式回答问题,如何清除特定文本区域?(通过谷歌表格到谷歌文档)

问题描述

我有一个正在运行的 Google 表单,它会根据响应和输入自动生成一封信。但是,如果可能的话,如果表单选择选择“无”作为表单选项,我希望能够清除字母中的特定文本。

例如,var auditorAddressLine4 = e.values [5];如果此部分的表单中有人要输入“无”,我希望它从信中清除地址第 4 行并将该区域留空。

这可能吗?

function autoFillGoogleDocFromForm(e) {

  var timestamp = e.values[0];
  var auditorFirmName = e.values[1];
  var auditorAddressLine1 = e.values[2];
  var auditorAddressLine2 = e.values[3];
  var auditorAddressLine3 = e.values[4];
  var auditorAddressLine4 = e.values[5];
  var dateOfLetterIssue = e.values[6];
  const template = "template";
  
  var templateFile = DriveApp.getFileById("");
  var templateFolder = DriveApp.getFolderById("");

  var copy = templateFile.makeCopy(auditorFirmName + $ {
    template
  }, templateFolder);
  var doc = DocumentApp.openById(copy.getId());

  var body = doc.getBody();

  body.replaceText("{{Insert Auditor Firm name}}", auditorFirmName);
  body.replaceText("{{Address Line 1}}", auditorAddressLine1);
  body.replaceText("{{Address Line 2}}", auditorAddressLine2);
  body.replaceText("{{Address Line 3}}", auditorAddressLine3);
  body.replaceText("{{Address Line 4}}", auditorAddressLine4);
  body.replaceText("{{Date}}", dateOfLetterIssue);

  doc.saveAndClose();
}

标签: javascriptgoogle-apps-script

解决方案


正如 isherwood 在他的评论中所说,根据我的理解,一个简单的if陈述可以解决您的问题。然后将其配对,findText这样deleteText您就知道要在模板中删除什么。请参阅下面的代码。

代码:

...
body.replaceText("{{Address Line 3}}", auditorAddressLine3);
if(auditorAddressLine4 == "none") {
  // if "none", remove the string.
  var string = body.findText("{{Address Line 4}}");
  var startOffset = string.getStartOffset();
  var endOffset = string.getEndOffsetInclusive();
  string.getElement().asText().deleteText(startOffset, endOffset);
}
else {
  body.replaceText("{{Address Line 4}}", auditorAddressLine4);
}
body.replaceText("{{Date}}", dateOfLetterIssue);
...

在上面的代码中,主要思想应该是如果值是"none"for auditorAddressLine4,那么"{{Address Line 4}}"将被删除而不是被替换"none"

笔记:

  • 您可能需要显示示例模板和值,以便在上述答案不起作用时对其进行适当修改。

编辑:

下面的代码适用于示例

代码:

function autoFillGoogleDocFromForm(e) {
  var formResponse = e.response;
  var itemResponses = formResponse.getItemResponses();
  var test1 = itemResponses[0].getResponse();  
  var test2 = itemResponses[1].getResponse();
  const template = "template";
  
  var templateFile = DriveApp.getFileById("file id");
  var templateFolder = DriveApp.getFolderById("folder id");

  var copy = templateFile.makeCopy("test " + template, templateFolder);
  var doc = DocumentApp.openById(copy.getId());

  var body = doc.getBody();

  body.replaceText("{{TEST 1}}", test1);
  if(test2 == "None") {
    var string = body.findText("{{TEST 2}}");
    var startOffset = string.getStartOffset();
    var endOffset = string.getEndOffsetInclusive();
    string.getElement().asText().deleteText(startOffset, endOffset);
  }
  else {
    body.replaceText("{{TEST 2}}", test2);
  }

  doc.saveAndClose();
}

测试1:

测试1 输出1

测试 2:

测试2 输出2

笔记:

  • 脚本被添加到表单中,因此看起来不同。但重要的是if-else块。

工作表脚本:

function autoFillGoogleDocFromForm(e) {
  var test1 = e.values[1];  
  var test2 = e.values[2];
  const template = "template";
  
  var templateFile = DriveApp.getFileById("file id");
  var templateFolder = DriveApp.getFolderById("folder id");

  var copy = templateFile.makeCopy("test " + template, templateFolder);
  var doc = DocumentApp.openById(copy.getId());

  var body = doc.getBody();

  body.replaceText("{{TEST 1}}", test1);
  if(test2 == "None") {
    var string = body.findText("{{TEST 2}}");
    var startOffset = string.getStartOffset();
    var endOffset = string.getEndOffsetInclusive();
    string.getElement().asText().deleteText(startOffset, endOffset);
  }
  else {
    body.replaceText("{{TEST 2}}", test2);
  }

  doc.saveAndClose();
}

推荐阅读