Попытка построить отчет для отправки по электронной почте. Моя идея заключалась в том, чтобы создать электронное письмо с использованием HTML-шаблона, но я, кажется, что-то упускаю... Электронное письмо должно содержать отчет, который будет включать все записи с определенным месяцем в ColB.
Вот краткий демонстрационный лист
Вот мой код
function MonthlyPulseCheck() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
var pulsedate = new Date("02/02/2022");
var pulsemonth = pulsedate.getMonth();
var Pulsetable = buildmonthlypulse(pulsemonth);
var emailtemplate = HtmlService.createTemplateFromFile('Monthly pulse check');
emailtemplate.OOOPULSE = Pulsetable;
var emailbody = emailtemplate.evaluate();
GmailApp.sendEmail('[email protected]',( 'monthly pulse check for month ' + pulsemonth), '',
{htmlBody: emailbody.getContent(),
name: 'test system',
from: '[email protected]',
replyTo: '[email protected]',
})
}
function buildmonthlypulse(pulsemonth) {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
var Pulsearray = spreadsheet.getRange('A2:C').getValues();
var i = 0;
var counter = 1;
var imax = 15;//Pulsearray.length;
for (var i = 0; i < imax; i++) {
var arraydate = new Date(Pulsearray[i][1]);
var arraymonth = arraydate.getMonth();
//var pulseHTML = 0;
//var checkdate = new Date(arraydate);
if (arraymonth === pulsemonth) {
if (counter === 1) {
var pulseHTML = '<table style = "float: right;"> <body> <tr> <td> TEXT2</td> <td> TEXT</td> <td><a href = "ynet.co.il"> NAME</a></td> </tr>'
}
var name = spreadsheet.getRange(i+2, 1).getValue();
var namelink = 'google.com';
var pulseHTML = pulseHTML + ' <tr> <td> 1</td> <td> 2</td> <td><a href = "youtube.com"> 3</a></td> </tr>';
var counter = counter + 1;
}
}
if (counter != 1) {
var pulseHTML = pulseHTML + '</tbody> </table>';
}
return pulseHTML;
}
Вот HTML (используется как шаблон)
<!DOCTYPE html>
<html>
<head>
<base target = "_top">
</head>
<body>
<?=OOOPULSE?>
</body>
</html>
электронная почта отправляется только с цифрой 0 в теле. Кто-нибудь может понять это?
Попробуйте построить свой текст с помощью Utilities.formatString()
Спасибо за этот вклад. Я думаю, что теперь я разобрался с этим, за исключением следующего: я пытаюсь «создать» ссылку на определенный диапазон внутри листа. Итак, я создаю что-то вроде этого docs.google.com/spreadsheets/d/1XXXXXX/… Сборка работает нормально, но когда она проходит через шаблон и оценивает процесс, что-то теряется, и "&" превращается в "%E2%A6%A5". Есть предположения?
Я попытался воспроизвести ваш код и обнаружил некоторые проблемы:
function buildmonthlypulse()
вы объявили var pulseHTML
несколько раз внутри for loop
, который недоступен для оператора return.<?= ... ?>
, которые используются для печати значений с контекстным экранированием. HTML-элементы в вашем var pulseHTML
распознаются как строки.Решение:
var pulseHTML = ''
над оператором цикла for (так же, как прокомментированный) и внутри цикла for удалите var
и сохраните pulseHTML
. Пример: pulseHTML = pulseHTML + '</tbody> </table>';
"<?= ... ?>"
используйте скриптлеты принудительной печати<?!= ... ?>
. Это то же самое, что и скрипты Printing, но избегайте контекстного экранирования.Пример вывода:
Использование сценариев печати
Использование сценариев принудительной печати
Придирка:
<body>
на <tbody>
в pulseHTML = '<table style = "float: right;"> <body> <tr>....
вашего кода.Спасибо за этот вклад. Я думаю, что теперь я разобрался с этим, за исключением следующего: я пытаюсь «создать» ссылку на определенный диапазон внутри листа. Итак, я создаю что-то вроде этого docs.google.com/spreadsheets/d/1XXXXXX/… Сборка работает нормально, но когда она проходит через шаблон и оценивает процесс, что-то теряется, и "&" превращается в "%E2%A6%A5". Есть предположения?
@user13708028 user13708028 - Пожалуйста, создайте для него отдельный пост, так как он не связан с исходным постом. Вы можете связать этот пост с вашим новым постом для справки.
Понял. Вот ссылка на новый пост stackoverflow.com/questions/65311615/…
Я думаю, что, вероятно, что-то не так с вашей функцией
buildmonthlypulse(pulsemonth)
, во-первых, я бы изменил ваш диапазонspreadsheet.getRange(2,1,spreadsheat.getLastRow()-1,3).getValues();
, потому что с тем, как он у вас есть, вы, вероятно, получите много дополнительных нулевых строк внизу.