Сохранение разрывов строк
Для сохранения разрывов строк проблема заключается в том, что разрывы строк на основе текста (возврат каретки, \r
или перевод строки, \n
) игнорируются в HTML.Лучший способ создать интервал между строками - это использовать выделенный элемент «разрыв строки» или разделить текст на отдельные элементы и добавить интервал с помощью CSS.
К счастью, преобразование строки Google Sheetsвзломать HTML действительно легко.Просто измените messageRange.getValue()
на messageRange.getValue().replace(/[\r\n]{1,2}/g,"<br>")
.
Расширенное форматирование
Если вы хотите сохранить более сложное форматирование, такое как цвета и изображения, решение становится немного сложнее.И range.getValue()
, и событие range.getRichTextValue().getText()
оба возвращают простой текст.Чтобы преобразовать в HTML, вам нужно использовать кучу других методов, таких как range.getFontColors();
, и проанализировать вывод в CSS и объединить его со значением простого текста.Для этого есть специальная библиотека SheetConverter , и вы можете посмотреть этот SO-ответ для подробностей.
Другие вещи, которые я заметил:
Я заметил несколько других вещей в вашем коде, которые вы можете изменить.Возможно, вы заметили в моем решении, что я использовал messageRange.getValue()
, но в вашем коде у вас есть messageRange.getValues()
.Это потому, что вам нужно одно значение, но range.getValues()
предназначено для получения нескольких значений из диапазона> 1 ячеек.
В вашем htmlBody
также есть некорректный HTML.Вы открываете кучу <p>
тегов, но никогда не закрываете их с помощью </p>
.
Другое дело, что способ получения последнего ряда на самом деле не имеет смысла.Вы проверяете последнюю строку «A: A» на активном листе, но активный лист может измениться, и нет никакой гарантии, что он совпадает с «Form Response», или что A: A имеет ту же последнюю строку, что и D: D.Я думаю, что более безопасным решением было бы что-то вроде этого (которое также включает вышеупомянутые рекомендуемые изменения):
function SendEmail() {
var formResponseSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Form Response");
// fetch entry
var messageRange = formResponseSheet.getRange("D" + formResponseSheet.getLastRow());
// build message
var message = {
to: "destination@email.net",
subject: "New Entry Posted",
htmlBody: 'Hello, a new entry was posted.<p>' + messageRange.getValue().replace(/[\r\n]{1,2}/g,"<br>") + "</p><a href=\"www.some_link.com\">Link here</a>."
};
// send
MailApp.sendEmail(message);
}