var name, email, phone;
name = email = phone = 'None';
function getEmails(){
var threads = GmailApp.search('label:Заявка');
if (threads.length) {
for (var i=0; i < threads.length; i++) {
var messages = threads[i].getMessages();
for (var j=0; j < messages.length; j++) {
var message = messages[j];
message.markRead();
extractDetails(message);
}
getSheetData();
threads[i].removeLabel(GmailApp.getUserLabelByName("Заявка"));
threads[i].addLabel(GmailApp.getUserLabelByName("Обработано"));
}
} else {}
}
function extractDetails(message){
var dateTime = message.getDate();
searchInBody(message.getPlainBody());
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var activeSheet = SpreadsheetApp.setActiveSheet(spreadsheet.getSheetByName("Новые"));
activeSheet.appendRow([dateTime, name, email, phone]);
}
function searchInBody(mes) {
var lines, subline;
lines = mes.split("\n");
for (index = 0; index < lines.length; ++index) {
if(lines[index].indexOf('Name:') + 1) {
subline = lines[index].split(":");
name = subline[1].toString().trim();
}
if(lines[index].indexOf('Email:') + 1) {
subline = lines[index].split(":");
email = subline[1].toString().trim();
}
if(lines[index].indexOf('Phone:') + 1) {
subline = lines[index].split(":");
phone = subline[1].toString().trim().slice(1,);
}
}
}
function getSheetData() {
var re = /\S+@\S+\.\S+/;
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.setActiveSheet(spreadsheet.getSheetByName("Новые"));
var data = sheet.getRange('A2:F').getValues();
sheet.getRange('A2:F').clearContent();
data.forEach(row => {
if (row[2] !== '' && re.test(row[2])) {
sendMail();
} else {}
})
var sheet1 = SpreadsheetApp.setActiveSheet(spreadsheet.getSheetByName("Обработанные"));
var row = data.length;
var column = data[0].length;
sheet1.getRange(sheet1.getLastRow()+1, 1, row, column).setValues(data);
}
function sendMail() {
var html = 'Здравствуйте '+name+'!<br><br>Ваша заявка принята, наш специалист скоро свяжется с вами.<br><br>Спасибо за обращение.';
var recipientsTO = email;
var recipientsCC = email;
var Subject = "Ваша заявка принята";
MailApp.sendEmail({
to: recipientsTO,
cc: recipientsCC,
subject: Subject,
htmlBody: html
});
}
let sp = SpreadsheetApp.getActiveSpreadsheet() - подключаемся к нашей таблице
let sheet = sp.getSheetByName() - имеем дело в листом котором данные
let cell = sheet.getRange(2,3) - обратились к ячейке по корординатам (способом много)
let id = cell.getValue() - взяли значение например id
let mainFolder = DriveApp.getFolderById() - также можно получить папку по id (id находится в url папки)
let folders = mainFolder .getFolders - так можно получить все папки внутри
while (folders.hasNext()) { так мы бегаем по всем папкам внутри и вытаскиваем имя
let folder = folders.next();
let name = getName();
}
=IMPORTRANGE("https://docs.google.com/spreadsheets/d/"; "Показатель!C2:C")
const formulaTemplate = '=IMPORTRANGE("https://docs.google.com/spreadsheets/d/"; "Показатель!C2")';
let range = spreadsheet.getRange('C2:C1240');
let formulas = range.getFormulas();
formulas = formulas.map((row,ri)=>row.map(f=>formulaTemplate.replace('!C2', '!C'+(ri+2))));
range.setFormulas(formulas);
=QUERY(
ARRAYFORMULA(
{
QUERY(
FLATTEN(IFERROR(SPLIT('Данные'!B:B, ", ", 0))),
"WHERE Col1 IS NOT NULL",
0
),
VLOOKUP(
QUERY(
FLATTEN(IF(IFERROR(SPLIT('Данные'!B:B, ", ", 0)) = "",, ROW('Данные'!A:A))),
"WHERE Col1 IS NOT NULL",
0
),
{
ROW('Данные'!A:A),
'Данные'!A:A,
'Данные'!C:P
},
SEQUENCE(1, COLUMNS('Данные'!C:P) + 1, 2),
0
)
}
),
"SELECT Col2, Col1, Col" & JOIN(", Col", SEQUENCE(1, COLUMNS('Данные'!C:P), 3)) & "
FORMAT Col2 'yyyy-mm-dd hh:mm:ss'",
1
)
=NETWORKDAYS.INTL(EOMONTH(TODAY();-1)+1;EOMONTH(TODAY();0);"0000001";F1:F)
=NETWORKDAYS.INTL(EOMONTH(TODAY();-1)+1;TODAY();"0000001";F1:F)
Но работая с закрытыми утилитами, есть риск утечки токена...
Оффициально клиента гугл, по какой то причине делать не хочет...
Вот и вопрос, чем пользоваться что бы это было максимально безопасно.