javascript - 如果以特定方式回答问题,如何清除特定文本区域?(通过谷歌表格到谷歌文档)
问题描述
我有一个正在运行的 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();
}
解决方案
正如 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:
测试 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();
}
推荐阅读
- python-3.x - PIL ImageEnhance 库是否支持 16 位 JPG 图像
- jquery - CSS 适用于 ajax 成功响应
- python - 加权随机选择:根据 .txt 文件中的频率随机生成“n”个单词列表
- reactjs - 太多的重新渲染。React 限制了渲染的数量以防止无限循环。在 render 方法中更新功能组件的状态
- python - 在一个函数中返回多个值
- sql - Spark SQL(Databricks)-AnalysisException:无法评估内联表定义中的表达式outer()-多列聚合
- yugabyte-db - 如何在 yugabyte 的标准输出上打印更改数据日志?
- python - 天蓝色 bash 环境中的 rpyc_classic.py
- html - 如何实现缩小到另一个图像过渡效果
- encryption - 如何加密 neo4j 数据?