【问题标题】:0 value doesn't appear using Google Apps Script Simple Mail Merge使用 Google Apps 脚本简单邮件合并不会出现 0 值
【发布时间】:2018-05-25 20:12:27
【问题描述】:

在使用以下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 值,但空单元格在电子邮件文本中返回为“未定义”)。

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • 谢谢!!我试过你的说法,它适用于我的情况。对不起,如果我的问题太琐碎了。我只是一个初学者。
    猜你喜欢
    • 2020-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多