Advertisement
Guest User

Untitled

a guest
Apr 1st, 2015
248
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.05 KB | None | 0 0
  1. // Проверить существует ли уже такой проект
  2. function projectExists(projectname) {
  3. var ss = SpreadsheetApp.getActiveSpreadsheet();
  4. var result = ss.getSheetByName(projectname);
  5. if ( result == null ) {
  6. return false;
  7. } else {
  8. return true;
  9. }
  10. }
  11.  
  12. // Создать лист для нового проекта
  13. function createNewProject(projectname) {
  14. var ss = SpreadsheetApp.getActiveSpreadsheet();
  15. if ( !projectExists(projectname) ) {
  16. var newsheet = ss.insertSheet(projectname);
  17. setTableHeader(newsheet);
  18. return newsheet;
  19. }
  20. }
  21.  
  22. // Задать шапку таблицы в листе нового проекта
  23. function setTableHeader(sheet) {
  24. var ss = SpreadsheetApp.getActiveSpreadsheet();
  25. var sheet = ss.setActiveSheet(sheet);
  26.  
  27. var fields = [];
  28. fields[1] = 'Дата';
  29. fields[2] = 'Время';
  30. fields[3] = 'typ';
  31. fields[4] = 'src';
  32. fields[5] = 'mdm';
  33. fields[6] = 'cmp';
  34. fields[7] = 'cnt';
  35. fields[8] = 'trm';
  36. fields[9] = 'Тема сообщения';
  37. fields[10] = 'Имя';
  38. fields[11] = 'Email';
  39. fields[12] = 'Телефон';
  40. fields[13] = 'Сообщение';
  41. fields[14] = 'Примечания';
  42.  
  43. for ( var i = 1; i < fields.length; i++ ) {
  44. var cell = sheet.getRange(1,i);
  45. cell.setValue(fields[i]);
  46. cell.setBackground('#ddd');
  47. }
  48. sheet.setFrozenRows(1);
  49. }
  50.  
  51. // Проверить есть на цепочке сообщений заданная метка
  52. function labelExists(label, thread) {
  53. var labels = thread.getLabels();
  54. for (var i = 0; i < labels.length; i++) {
  55. var labelname = labels[i].getName();
  56. if ( labelname == label ) {
  57. return true;
  58. } else {
  59. continue;
  60. }
  61. }
  62. return false;
  63. }
  64.  
  65. // Вставить новую строку данных
  66. function appendRow(dataobj, sheet) {
  67. var indexes = [
  68. 'date',
  69. 'time',
  70. 'typ',
  71. 'src',
  72. 'mdm',
  73. 'cmp',
  74. 'cnt',
  75. 'trm',
  76. 'subject',
  77. 'name',
  78. 'email',
  79. 'phone',
  80. 'message',
  81. 'prim'
  82. ];
  83.  
  84. var row = [];
  85. for ( var i = 0; i < indexes.length; i++ ) {
  86. if ( dataobj[indexes[i]] != undefined ) {
  87. row[i] = dataobj[indexes[i]];
  88. } else {
  89. row[i] = '';
  90. }
  91. }
  92. row[11] = row[11].replace('+', ''); // Удалить знак "+" в телефонном номере
  93. row[12] = row[12].replace(/<\/?[^>]+>/gi, ''); // Удалить теги в сообщении
  94. sheet.appendRow(row);
  95. }
  96.  
  97. // Обработка сообщений
  98. function processMessages() {
  99. var ss = SpreadsheetApp.getActiveSpreadsheet();
  100. var threads = GmailApp.getInboxThreads(0,5);
  101. for (var i = 0; i < threads.length; i++) { // Выбрать все цепочки сообщений
  102. var messages = GmailApp.getMessagesForThread(threads[i]);
  103. for (var n = 0 ; n < messages.length; n++) { // Выбрать все сообщения из цепочки
  104. var message = messages[n];
  105. if ( message.isStarred() == false ) {
  106. var content = message.getRawContent(); // Контет сообщения
  107. var datastring = content.match(/{([^}].*)}/g); // Получить строку с данными
  108. if ( datastring != null ) { // Обрабатываем, если строка с данными есть
  109. var dataobj = JSON.parse(datastring[0]);
  110. var from = message.getFrom(); // Поле "From"
  111. var projectname = from.match(/"(.*?)"/); // Фильтруем имя отправителя, это и есть название проекта
  112. projectname = projectname[1];
  113.  
  114. if ( projectExists(projectname) ) { // Если такой проект есть...
  115. var sheet = ss.setActiveSheet(ss.getSheetByName(projectname)); // переходим на лист проекта
  116. } else { // Если такого нет...
  117. var sheet = createNewProject(projectname); // создаем новый лист проекта
  118. }
  119.  
  120. // Вставляем строку в таблицу
  121. appendRow(dataobj, sheet);
  122.  
  123. // Метим звездочкой как обработанное
  124. message.star();
  125. }
  126. }
  127. }
  128. }
  129. }
  130.  
  131. // Функция для ручной обработки писем отдельного проекта
  132. function processByProject(){
  133. var domain = 'moleskineria.ru';
  134. var ss = SpreadsheetApp.getActiveSpreadsheet();
  135. var threads = GmailApp.search('from:'+domain);
  136. for (var i = 0; i < threads.length; i++) { // Выбрать все цепочки сообщений
  137. var messages = GmailApp.getMessagesForThread(threads[i]);
  138. for (var n = 0 ; n < messages.length; n++) { // Выбрать все сообщения из цепочки
  139. var message = messages[n];
  140. if ( message.isStarred() == false ) {
  141. var content = message.getRawContent(); // Контет сообщения
  142. var datastring = content.match(/{([^}].*)}/g); // Получить строку с данными
  143. if ( datastring != null ) { // Обрабатываем, если строка с данными есть
  144. var dataobj = JSON.parse(datastring[0]);
  145. var from = message.getFrom(); // Поле "From"
  146. var projectname = from.match(/"(.*?)"/); // Фильтруем имя отправителя, это и есть название проекта
  147. projectname = projectname[1];
  148.  
  149. if ( projectExists(projectname) ) { // Если такой проект есть...
  150. var sheet = ss.setActiveSheet(ss.getSheetByName(projectname)); // переходим на лист проекта
  151. } else { // Если такого нет...
  152. var sheet = createNewProject(projectname); // создаем новый лист проекта
  153. }
  154.  
  155. // Вставляем строку в таблицу
  156. appendRow(dataobj, sheet);
  157.  
  158. // Метим звездочкой как обработанное
  159. message.star();
  160. }
  161. }
  162. }
  163. }
  164. }
  165.  
  166. // Запуск
  167. function onOpen() {
  168. processMessages();
  169. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement