Snippets

Alexander Palachev Send Activ Sheet in Google Spread Sheet

Created by Alexander Palachev last modified
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)

HTTPS SSH

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