Не записываются данные в таблицу Google
Всем привет. Мой скрипт парсит "непрочитанные" входящие сообщения с почты из помеченной папки в гугл таблицу, а после помечает "как прочитанные". Но иногда бывают сбои: скрипт выполняется, помечает письма "как прочитанные", но запись в таблицу не делает. То есть по факту получается в логгере есть запись со всем содержимым этих писем, но в таблицу они не записываются. По идее нужно делать проверку, были ли записаны данные в таблицу и только после этого помечать письма "как прочитанные". Или же в коде ошибка, которая периодически дает о себе знать (ХЗ). Ребят помогите, я только учусь.
function GmailmarkReadEnd() {
//this is just the stuff that recognizes what spreadsheet you're in
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
var sheet = ss.getSheetByName('Лист2'); //gets the right sheet(указать название листа для записи)
/* searches your GMail for emails matching things "label:unread" + " label:support"
(support-это название папки в которую собираются письма) */
var query = "label:unread" + " label:support";
var threads = GmailApp.search(query);
var supportStats = [];
for (var i = 0; i < threads.length; i++) {
var messages = threads[i].getMessages();
for (var m = 0; m < messages.length; m++) {
var from = messages[m].getFrom(); //from field
var to = messages[m].getTo(); //to field
var time = messages[m].getDate(); //date field
var subject = messages[m].getSubject(); //subject field
var body = messages[m].getPlainBody(); //body field(заменить на getBody для html)
var mId = messages[m].getId(); //id field to create the link later
if (query === "label:unread" + " label:support") {
supportStats.push([from,to,time,subject,body,'https://mail.google.com/mail/u/0/#inbox/'+mId]);
Logger.log(supportStats) // Лог про который говорил.
}
}
}
if(!threads.length) return; // если нет непрочитанных - ничего не делать.
sheet.getRange(SpreadsheetApp.getActiveSheet().getLastRow()+1,2,supportStats.
length,supportStats[0].length).setValues(supportStats); //writes to the spreadsheet(записывает в электронную таблицу)
GmailApp.markThreadsRead(threads); // помечает, как прочитанное
// ***Сортировка записанных данных по дате***
sheet.getRange('D:D').activate();
sheet.sort(4, false);
}
Ответы (1 шт):
Всем привет. Спасибо, тем кто помогал. Вот окончательный вариант, с комментариями(что, да как), для таких же нубов, как я?. На англ. ветке форума, можно посмотреть подробности
Сам код:
function GmailParsing() {
var ss = SpreadsheetApp.getActive();
var sheet = ss.getSheetByName('Лист2'); //получаем нужный лист
const query = "label:unread" + " label:support"; //"support"-это название папки в которую собираются письма
var threads = GmailApp.search(query);
var supportStats = [];
for (var i = 0; i < threads.length; i++) {
var messages = threads[i].getMessages();
for (var m = 0; m < messages.length; m++) {
//Здесь выбираем нужные нам поля из писем
var from = messages[m].getFrom(); //from field
var to = messages[m].getTo(); //to field
var time = messages[m].getDate(); //date field
var subject = messages[m].getSubject(); //subject field
var body = messages[m].getPlainBody(); //body field((заменить на getBody для html)
var mId = messages[m].getId(); //поле id для создания ссылки
supportStats.push([from,to,time,subject,body,'https://mail.google.com/mail/u/0/#inbox/'+mId]);
Logger.log(supportStats) // The log
}
}
if(!threads.length) return; //если нет непрочитанных, ничего не делать
sheet.getRange(sheet.getLastRow()+1,2,supportStats.length,supportStats[0].length).setValues(supportStats); //запись в электронную таблицу
/*
!!!Обратите внимание!!!
В моем примере "getLastRow()+1,2"–получаем строку +1 после последней, 2 столбик): запись идет во 2 столбик после последней заполненной строки.
*/
GmailApp.markThreadsRead(threads); //помечаем как "прочитанное"
sheet.sort(4, false); // сортировка по столбцу("4"-столбец, "false/true"-порядок сортировки)
}