У меня есть скрипт, который запускается на листе Google, который анализирует электронную почту и создает новые строки на листе.Это используется для создания файла журнала из периодически обновляемых обновлений журнала.Это работает очень хорошо.
В настоящее время у меня есть переменная, которая используется для определения, какие электронные письма поступают на основе месяца (0 = январь и т. Д.)
Эта переменная должна быть скорректированакаждый месяц, а затем я должен создать новый ежемесячный лист (вкладка в основном) и выполнить сортировку и перемещение писем в gmail.
Я бы хотел настроить это так, чтобы он автоматически помещал январьэлектронные письма на листе за январь и февральские электронные письма на листе за февраль.
Я думал о каскадировании операторов ififif, но это стало слишком громоздким.
Я думал об итерации с использованием forперебирайте массив, содержащий все электронные письма, но это тоже кажется запутанным.
Есть предложения?
:: EDIT :: Чтобы быть понятным, мне действительно интересно, как разобрать всеэлектронные письма и отправьте их с января на январский лист (например).
:: EDIT :: Добавлен текущий скрипт
function myFunction() {
var label = GmailApp.getUserLabelByName(myLabel);
var label2 = GmailApp.getUserLabelByName(newLabel);
var threads = label.getThreads();
var data = new Array();
var newData = new Array();
// get all the email threads matching myLabel
for (var i = 0; i < threads.length; i++) {
var messages = GmailApp.getMessagesForThread(threads[i]);
// archive thread
label2.addToThread(threads[i]);
label.removeFromThread(threads[i]);
// get each individual email from the threads
for (var j = 0; j < messages.length; j++) {
var bodyText = messages[j].getPlainBody();
// split the email body into individual "paragraph" strings based on the regExp variable
while (matches = regExp.exec(bodyText)) {
var logdata = matches[1];
for (k in keys) {
logdata = logdata.replace(keys[k], "");
}
// split out each "paragraph" string into an array
var lines = logdata.split(/[\r\n]+/);
for (l in lines) {
lines[l] = lines[l].replace('*F','');
lines[l] = lines[l].trim();
}
for (l in lines) {
lines[l] = lines[l].replace(/^(\:\s)/, "");
}
// Turn the first element in the array into a date element, format it, and put it back
lines[0] = Utilities.formatDate(new Date(lines[0]), "America/Phoenix", "M/d/yy HH:mm:ss");
// Put the array to a new item in the data array for further processing
if (curMonth == (new Date(lines[0]).getMonth())) {
data.push(lines);
}
}
}
}
// Compare the information in the data array to oldData information in the sheet
if (data.length) {
var oldData = s.getRange(range).getValues();
for (h in oldData) {
oldData[h][0] = Utilities.formatDate(new Date(oldData[h][0]), "America/Phoenix", "M/d/yy HH:mm:ss");
}
for (i in data) {
var row = data[i];
var duplicate = false;
for (j in oldData) {
if (row.join() == oldData[j].join()) {
duplicate = true;
}
}
if (!duplicate) {
newData.push(row);
}
}
// check to write newData only if there is newData, this stops an error when newData is empty
if (newData.length) {
s.getRange(s.getLastRow() + 1, 1, newData.length, newData[0].length).setValues(newData);
}
s.getRange(range).sort(1); //sorts the sheet
}
}