使用Google Apps脚本简单邮件合并不会显示0值

时间:2018-05-25 11:50:51

标签: google-apps-script google-sheets mailmerge

在使用以下script期间,如果在我在电子邮件模板中指示的列的单元格中,则存在" 0"作为一个值,它不会出现在最终发送的电子邮件中。

它被一个空字符串替换,好像该单元格是空的。

我认为问题出在该声明中:

// Replace variables from the template with the actual values from the data object.
// If no value is available, replace with the empty string.
for (var i = 0; i < templateVars.length; ++i) {
// normalizeHeader ignores ${"} so we can call it directly here.
var variableData = data[normalizeHeader(templateVars[i])];
email = email.replace(templateVars[i], variableData || "");
}

但如果我删除了布尔符号,我只留下&#34; variableData&#34;问题在空单元格上移动(显示已发送电子邮件中的0值,但空单元格返回为&#34;未定义&#34;在电子邮件文本中)。

我希望有人可以帮助我。 谢谢

1 个答案:

答案 0 :(得分:1)

欢迎使用JavaScript,其中0,''""nullundefined均为false - y。

您遇到的问题是||执行的逻辑OR使用非严格的相等比较,因此当variableData为0时,它会被类型转换为false(以及选择nullundefined)的所需转化以及""的替代替换。

要解决此问题,您需要在替换之前对variableData的值进行更严格的检查。

例如,可以使用三元运算符:

var variableData = ...
variableData = (!variableData && variableData !== 0) ? "" : variableData

对于其他"" - y值,这将替换为false,但允许替换为数值0。另请注意String(0)是真实的,因此如果将找到的变量作为字符串返回,则短路运算符应该产生所需的结果。