Отправляйте результаты фильтрации по электронной почте из скриптов Google Apps

#javascript #google-apps-script #google-sheets #google-sheets-api

#javascript #google-приложения-скрипт #google-sheets #google-таблицы-api

Вопрос:

У меня есть следующая функция (кстати, я новичок в скриптах Google Apps).

 function testing(){
  let thisSpreadsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(thirtyMinuteWorksheet).getDataRange().getValues()

  let filterData = thisSpreadsheet.filter(function (row,index) {
      return row[11] >= 30
  });


if(filterData.length > 0){
      MailApp.sendEmail({
      to: 'email@gmail.com',
      subject: 'test',
      body: filterData,
      noReply: true
      });
  }
 

данные фильтра фильтруют лист и возвращают все строки, соответствующие логике. Я хотел бы иметь возможность отправлять эти строки по электронной почте. если я запускаю это, я получаю и отправляю по электронной почте это сообщение. (плюс еще, сократите его для простоты).

 {10=[Ljava.lang.Object;@7f7f43f6, 179=[Ljava.lang.Object;@d387470, 
83=[Ljava.lang.Object;@5daa185f, 54=[Ljava.lang.Object;@39ca2a17, }
 

я вижу, что это объект, но я не смог найти ничего в их API, что указало бы мне правильное направление относительно того, как скрыть эти результаты в фактические значения

ps

Да, если я утешу.log filterData я действительно получаю правильные объекты. есть какие-нибудь идеи?

Ответ №1:

Я нашел способ, поскольку это массив объектов, я просто преобразовал его в и HTML-функцию. как показано ниже.

Я передал результаты своего массива и также добавил некоторые заголовки.

 function makeTableHTML(myArray,tableHeaders) {
    let result = "<table border=1>";
    result  = "<tr>";
        for(var j=0; j<tableHeaders.length; j  ){
            result  = "<td>" tableHeaders[j] "</td>";
        }
        result  = "</tr>";
    for(var i=0; i<myArray.length; i  ) {
        result  = "<tr>";
        for(var j=0; j<myArray[i].length; j  ){
            result  = "<td>" myArray[i][j] "</td>";
        }
        result  = "</tr>";
    }
    result  = "</table>";

    return resu<
}
 

Это дало мне возможность добавить возвращаемые результаты в функцию отправки почты из скриптов Google.

Комментарии:

1. отличный ответ. Это также работает, если вы хотите, чтобы это было в таблице.

Ответ №2:

Вы можете попробовать использовать join вместо этого, поскольку отправляемые вами данные представляют собой массив. Преобразуйте его в строку, чтобы правильно отобразить данные.

Примеры данных:

примеры данных

Код:

   let filterData = thisSpreadsheet.filter(function (row, index) {
    return row[11] >= 30;
  });

  // Preprocesses filterData before sending mail
  filterData.forEach(function (row, index) {
    filterData[index] = filterData[index].join(",");
  });
  filterData = filterData.join("n");


  if (filterData.length > 0) {
    MailApp.sendEmail({
      to: 'email@gmail.com',
      subject: 'test',
      body: filterData,
      noReply: true
    });
  }
 

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

пример вывода

Один быстрый ответ — попытаться обернуть filterData с JSON.stringify() помощью, но вы не можете изменить способ отображения в почте.

Код:

body: JSON.stringify(filterData),

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

пример вывода2

Комментарии:

1. Спасибо, но объект Java, который я считаю, просто неверно истолкован, сценарий не знает, что с ним делать. Я нашел способ. я вскоре опубликую свой ответ.