#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),
Пример вывода:
Комментарии:
1. Спасибо, но объект Java, который я считаю, просто неверно истолкован, сценарий не знает, что с ним делать. Я нашел способ. я вскоре опубликую свой ответ.