+ var toMailDef = 'sendto@gmail.com';
+ var toMail = PropertiesService.getUserProperties().getProperty('sendMail');
+ PropertiesService.getUserProperties().setProperty('sendMail', toMailDef );
+ var ui = SpreadsheetApp.getUi();
+ var response = ui.alert(e);
+ var timeZone = Session.getScriptTimeZone();
+ 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' +
+ 'Или введите другой адрес: ',
+ if (response.getSelectedButton() == ui.Button.YES) {
+ if (validateEmail(response.getResponseText()) == true) {
+ PropertiesService.getUserProperties().setProperty('sendMail', response.getResponseText() );
+ toMail = PropertiesService.getUserProperties().getProperty('sendMail');
+ if (response.getResponseText().trim() !== '') {
+ var ui = SpreadsheetApp.getUi();
+ ui.alert ('Введен некорректный адрес получателя!: ' + response.getResponseText() );
+ Logger.log('Введен некорректный адрес получателя: ' + response.getResponseText() );
+ var folder = DriveApp.getRootFolder() ;
+ var newFile = folder.getFilesByName(newFileName);
+ // Ищем этот файл и удаляем (это необходимо если выключить временную метку)
+ // Создаем новую таблицу
+ 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, {
+ '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');
+ 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 );
+ var ui = SpreadsheetApp.getUi();
+ var response = ui.alert(e);
+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,}))$/;
+// Поиск и удаление файла по имени
+function delFile(fileName) {
+ var files = DriveApp.getFilesByName(fileName);
+ while (files.hasNext()) {
+ var eachFile = files.next();
+ var idToDLET = eachFile.getId();
+ Logger.log('idToDLET: ' + idToDLET);
+ var rtrnFromDLET = Drive.Files.remove(idToDLET);
+ var ui = SpreadsheetApp.getUi();
+ var response = ui.alert(e);