Snippets
Created by
Alexander Palachev
last modified
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 | function sendSheet() {
var toMailDef = 'sendto@gmail.com';
try {
var toMail = PropertiesService.getUserProperties().getProperty('sendMail');
if (toMail == null) {
PropertiesService.getUserProperties().setProperty('sendMail', toMailDef );
}
catch (e) {
var ui = SpreadsheetApp.getUi();
var response = ui.alert(e);
return;
}
var timeZone = Session.getScriptTimeZone();
var d = new Date();
var timeStamp = d.getTime();
var dateFile = Utilities.formatDate(d, timeZone,'ddMMyyyyHHmmss');
// Активная таблица
var ssSource = SpreadsheetApp.getActiveSpreadsheet();
// Имя активного листа
var ssSourceName = ssSource.getActiveSheet().getName();
// Добавляем к имени листа метку времени, чтобы не затереть случайно файл с таким же именем.
//var newFileName = ssSourceName;
var newFileName = ssSourceName + '-' + dateFile;
var sendFileName = ssSourceName + '.xlsx';
var ui = SpreadsheetApp.getUi();
var response = ui.prompt('Пересылка выбранного листа в формате MS Excel.',
'Лист: ' + ssSourceName + '\n' +
'Будет отправлен как файл: ' + sendFileName + '\n' +
'Адрес получателя: ' + toMail + '\n' + '\n' +
'Или введите другой адрес: ',
ui.ButtonSet.YES_NO);
if (response.getSelectedButton() == ui.Button.YES) {
Logger.log('Да!');
if (validateEmail(response.getResponseText()) == true) {
PropertiesService.getUserProperties().setProperty('sendMail', response.getResponseText() );
toMail = PropertiesService.getUserProperties().getProperty('sendMail');
}
else {
if (response.getResponseText().trim() !== '') {
var ui = SpreadsheetApp.getUi();
ui.alert ('Введен некорректный адрес получателя!: ' + response.getResponseText() );
Logger.log('Введен некорректный адрес получателя: ' + response.getResponseText() );
}
}
} else {
Logger.log('Нет');
return (false);
}
var folder = DriveApp.getRootFolder() ;
var newFile = folder.getFilesByName(newFileName);
// Ищем этот файл и удаляем (это необходимо если выключить временную метку)
delFile(newFile);
// Создаем новую таблицу
var ssNew = SpreadsheetApp.create(newFileName);
// Копируем активный лист в новую таблицу
var ssNewSheet = ssSource.getSheetByName(ssSourceName).copyTo(ssNew);
SpreadsheetApp.flush();
// Присваиваем имя новому листу
ssNewSheet.setName(ssSourceName);
// Удаляем первый лист
var result = ssNew.deleteSheet(ssNew.getSheets()[0]);
// Преобразоование в Excel
var ssSend = ssNew.getId()
var sendFile = Drive.Files.get(ssSend);
var url = sendFile.exportLinks[MimeType.MICROSOFT_EXCEL];
var token = ScriptApp.getOAuthToken();
var response = UrlFetchApp.fetch(url, {
headers: {
'Authorization': 'Bearer ' + token
}
});
var blobs = [response.getBlob().setName(sendFileName)];
// var sizeBlob = blobs[0].getBytes();
var subject = ssSourceName;
var message = 'Файл подготовлен и отправлен: ' + Utilities.formatDate(d, timeZone,'dd.MM.yyyy HH:mm:ss');
try {
MailApp.sendEmail(toMail, subject, message , {attachments: blobs });
var uisend = SpreadsheetApp.getUi();
var response = uisend.alert('Файл '+ sendFileName + ' отправлен! \n' +
'Адрес получателя: ' + toMail + '\n' +
'Тема сообщения: ' + subject + '\n' +
'Адрес отправителя: ' + Session.getActiveUser().getEmail()
);
// 'Размер файла: ' + sizeBlob );
}
catch (e) {
var ui = SpreadsheetApp.getUi();
var response = ui.alert(e);
return;
}
// Удаляем файл
delFile(newFileName);
}
function validateEmail(email) {
var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
return re.test(email);
}
// Поиск и удаление файла по имени
function delFile(fileName) {
var files = DriveApp.getFilesByName(fileName);
while (files.hasNext()) {
var eachFile = files.next();
var idToDLET = eachFile.getId();
Logger.log('idToDLET: ' + idToDLET);
try {
var rtrnFromDLET = Drive.Files.remove(idToDLET);
}
catch (e) {
var ui = SpreadsheetApp.getUi();
var response = ui.alert(e);
}
}
}
|
Comments (0)
You can clone a snippet to your computer for local editing. Learn more.