Скрипт Google - использование шаблона для построения таблицы

Попытка построить отчет для отправки по электронной почте. Моя идея заключалась в том, чтобы создать электронное письмо с использованием 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>&nbsp;TEXT2</td> <td>&nbsp;TEXT</td> <td><a href = "ynet.co.il">&nbsp;NAME</a></td> </tr>'
  }
  var name =  spreadsheet.getRange(i+2, 1).getValue();
  var namelink = 'google.com';
  
  var pulseHTML = pulseHTML + '  <tr> <td>&nbsp;1</td> <td>&nbsp;2</td> <td><a href = "youtube.com">&nbsp;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 в теле. Кто-нибудь может понять это?

Я думаю, что, вероятно, что-то не так с вашей функцией buildmonthlypulse(pulsemonth), во-первых, я бы изменил ваш диапазон spreadsheet.getRange(2,1,spreadsheat.getLastRow()-1,3).getVa‌​lues();, потому что с тем, как он у вас есть, вы, вероятно, получите много дополнительных нулевых строк внизу.

Cooper 14.12.2020 20:42

Попробуйте построить свой текст с помощью Utilities.formatString()

Cooper 14.12.2020 20:45

Спасибо за этот вклад. Я думаю, что теперь я разобрался с этим, за исключением следующего: я пытаюсь «создать» ссылку на определенный диапазон внутри листа. Итак, я создаю что-то вроде этого docs.google.com/spreadsheets/d/1XXXXXX/… Сборка работает нормально, но когда она проходит через шаблон и оценивает процесс, что-то теряется, и "&" превращается в "%E2%A6%A5". Есть предположения?

user13708028 15.12.2020 09:48
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
3
812
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я попытался воспроизвести ваш код и обнаружил некоторые проблемы:

  1. В вашем function buildmonthlypulse() вы объявили var pulseHTML несколько раз внутри for loop, который недоступен для оператора return.
  2. В вашем HTML-файле вы используете Скриптлеты для печати<?= ... ?>, которые используются для печати значений с контекстным экранированием. HTML-элементы в вашем var pulseHTML распознаются как строки.

Решение:

  1. Объявите var pulseHTML = '' над оператором цикла for (так же, как прокомментированный) и внутри цикла for удалите var и сохраните pulseHTML. Пример: pulseHTML = pulseHTML + '</tbody> </table>';
  2. Вместо скриптлетов печати "<?= ... ?>" используйте скриптлеты принудительной печати<?!= ... ?>. Это то же самое, что и скрипты Printing, но избегайте контекстного экранирования.

Пример вывода:

Использование сценариев печати

Использование сценариев принудительной печати

Придирка:


Использованная литература:

Спасибо за этот вклад. Я думаю, что теперь я разобрался с этим, за исключением следующего: я пытаюсь «создать» ссылку на определенный диапазон внутри листа. Итак, я создаю что-то вроде этого docs.google.com/spreadsheets/d/1XXXXXX/… Сборка работает нормально, но когда она проходит через шаблон и оценивает процесс, что-то теряется, и "&" превращается в "%E2%A6%A5". Есть предположения?

user13708028 15.12.2020 17:22

@user13708028 user13708028 - Пожалуйста, создайте для него отдельный пост, так как он не связан с исходным постом. Вы можете связать этот пост с вашим новым постом для справки.

Nikko J. 15.12.2020 17:43

Понял. Вот ссылка на новый пост stackoverflow.com/questions/65311615/…

user13708028 15.12.2020 19:28

Другие вопросы по теме