Snippets

Alexander Palachev Send Activ Sheet in Google Spread Sheet

Updated by Alexander Palachev

File sendSheet Modified

  • Ignore whitespace
  • Hide word diff
     if (toMail == null) {
        PropertiesService.getUserProperties().setProperty('sendMail', toMailDef );
     }
-  }
+
   catch (e) {
     var ui = SpreadsheetApp.getUi();    
     var response = ui.alert(e);
Created by Alexander Palachev

File sendSheet Added

  • Ignore whitespace
  • Hide word diff
+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);
+    }    
+  }
+  
+} 
HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.