Значение 0 не отображается с помощью Google Apps Script Simple Mail Merge. - PullRequest
0 голосов
/ 25 мая 2018

Во время использования следующего сценария , если в ячейке одного из столбцов, которые я указал в шаблоне электронной почты, присутствует «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, но пустые ячейки возвращаются как «неопределенные» в тексте письма).

IНадеюсь, кто-нибудь может мне помочь.Спасибо

1 Ответ

0 голосов
/ 25 мая 2018

Добро пожаловать в JavaScript, где 0, '', "", null и undefined все означают false -y.

Проблема в том, что логическое ИЛИ выполнено|| использует нестрогое сравнение на равенство, поэтому, когда variableData равно 0, оно преобразуется в false (вместе с требуемыми преобразованиями null и undefined) и альтернативной заменой "" выбран.

Чтобы решить проблему, вам необходимо выполнить более тщательную проверку значения variableData перед его заменой.

Например, троичный оператор можетиспользоваться:

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

Это заменит "" для других false -y значений, но позволит заменить на числовое значение 0.Также обратите внимание, что String(0) является правдивым, поэтому, если вы вернете найденные переменные в виде строки, оператор короткого замыкания должен дать желаемый результат.

...