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

0 value doesn't appear using Google Apps Script Simple Mail Merge

在使用以下 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 || "");
}

但是如果我删除布尔符号并​​且我只留下 "variableData" 问题会在空单元格上移动(显示已发送电子邮件中的 0 值但空单元格返回为 "undefined"电子邮件正文)。

希望有人能帮助我。 谢谢

欢迎来到 JavaScript,其中 0、''""nullundefined 均表示 false-y。

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

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

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

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

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