Advertisement
AntSaf

Satusy_sdelok_Taganrog

Dec 19th, 2020 (edited)
519
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var GMAIL_LABEL = 'Maslov_status_sdelok_Taganrog';
  2. var GDRIVE_FILE = 'Maslov/ssta.xlsx';
  3.  
  4. function main() {
  5.  
  6.   var label = GmailApp.getUserLabelByName(GMAIL_LABEL);  
  7.     var threads = getUnprocessedThreads(label);
  8.     for(j=0; j<threads.length; j++) {
  9.       processThread(threads[j], label);
  10.       convert();
  11.       replace_to_ob();
  12.  
  13.   }
  14. }
  15.  
  16. function getOrMakeFolder(path) {
  17.   var folder = DriveApp.getRootFolder();
  18.   var names = path.split('/');
  19.   while(names.length) {
  20.     var name = names.shift();
  21.     if(name === '') continue;
  22.    
  23.     var folders = folder.getFoldersByName(name);
  24.     if(folders.hasNext()) {
  25.       folder = folders.next();
  26.     } else {
  27.       folder = folder.createFolder(name);
  28.     }
  29.   }
  30.   return folder;
  31. }
  32.  
  33. function getUnprocessedThreads(label) {
  34.   var from = 0;
  35.   var perrun = 100; //maximum is 500
  36.   var threads;
  37.   var result = [];
  38.  
  39.   do {
  40.     threads = label.getThreads(from, perrun);
  41.     from += perrun;
  42.    
  43.     for(var i=0; i<threads.length; i++) {
  44.       if(threads[i].hasStarredMessages()) continue;
  45.       result.push(threads[i]);
  46.     }
  47.   } while (threads.length === perrun);
  48.   return result;
  49. }
  50.  
  51. function getExtension(name) {
  52.   var re = /(?:\.([^.]+))?$/;
  53.   return re.exec(name)[1].toLowerCase();
  54. }
  55.  
  56. function createFilename(filename, info) {
  57.   var keys = Object.keys(info);
  58.   keys.sort(function(a,b) {
  59.     return b.length - a.length;
  60.   });
  61.  
  62.   for(var i=0; i<keys.length; i++) {
  63.     filename = filename.replace(new RegExp('\\$'+keys[i], 'g'), info[keys[i]]);
  64.   }
  65.   return filename;
  66. }
  67.  
  68. function saveAttachment(attachment, path) {
  69.   var parts = path.split('/');
  70.   var file = parts.pop();
  71.   var path = parts.join('/');
  72.  
  73.   var folder = getOrMakeFolder(path);
  74.   var check = folder.getFilesByName(file);
  75.   folder.createFile(attachment).setName(file);  
  76. }
  77.  
  78. function processThread(thread, label) {
  79.   var messages = thread.getMessages();
  80.  
  81.   for(var j=0; j<messages.length; j++) {
  82.     var message = messages[j];
  83.     if(message.isStarred()) continue;
  84.    
  85.     var attachments = message.getAttachments();
  86.     for(var i=0; i<attachments.length; i++) {
  87.       var attachment = attachments[i];
  88.       var info = {
  89.         'name': attachment.getName(),
  90.         'ext': getExtension(attachment.getName()),
  91.         'domain': message.getFrom().split('@')[1].replace(/[^a-zA-Z]+$/,''), // domain part of email
  92.         'sublabel': label.getName().substr(GMAIL_LABEL.length+1),
  93.         'y': ('0000' + (message.getDate().getFullYear())).slice(-4),
  94.         'm': ('00' + (message.getDate().getMonth()+1)).slice(-2),
  95.         'd': ('00' + (message.getDate().getDate())).slice(-2),
  96.         'h': ('00' + (message.getDate().getHours())).slice(-2),
  97.         'i': ('00' + (message.getDate().getMinutes())).slice(-2),
  98.         's': ('00' + (message.getDate().getSeconds())).slice(-2),
  99.         'mc': j,
  100.         'ac': i,
  101.       }
  102.       var file = createFilename(GDRIVE_FILE, info);
  103.       saveAttachment(attachment, file);
  104.       GmailApp.moveMessageToTrash(message);
  105.     }
  106.   }
  107. }
  108.  
  109. function convert() {
  110.  var files = DriveApp.searchFiles('title contains "ssta"');
  111.   while (files.hasNext()) {
  112.     var source = files.next();
  113.     var sourceId = source.getId();
  114.     var fileName = source.getName().replace('.xlsx', '');    
  115.     var file = {
  116.         title: fileName,
  117.       };
  118.      
  119.     file = Drive.Files.copy(file, sourceId, {convert: true});
  120.     file = Drive.Files.trash(sourceId);
  121.   }
  122. }
  123.  
  124. function replace_to_ob(){  
  125.   var files_ob = DriveApp.searchFiles('title contains "Obed"');
  126.   var ss_ob = SpreadsheetApp.open(files_ob.next());
  127.   var sheets_ob = ss_ob.getSheets();
  128.  
  129.   var files = DriveApp.searchFiles('title contains "ssta"');
  130. while (files.hasNext()) {
  131.   var ss = SpreadsheetApp.open(files.next());
  132.   var sheets = ss.getSheets();
  133.   for(var i =  0; i < sheets.length; i++){
  134.     var range  = sheets[i].getRange(1, 1, sheets[i].getLastRow(), sheets[i].getLastColumn());
  135.     sheets_ob[2].clear();
  136.     var range_ob = sheets_ob[2].getRange(1, 1, sheets[i].getLastRow(), sheets[i].getLastColumn());
  137.     var values = range.getValues();
  138.     range_ob.setValues(values);
  139.     }  
  140.   }
  141. remove();
  142. }
  143.  
  144. function remove(){
  145.   var files = DriveApp.searchFiles('title = "ssta"');
  146. while (files.hasNext()) {
  147.       var file = files.next();
  148.     file.setTrashed(true);
  149.    }
  150. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement