Advertisement
Namokonov

Untitled

Nov 19th, 2020
253
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //Какие столбцы попадут в CSV
  2. const cols = [1, 2, 3, 4];
  3.  
  4. //Сколько строк с данными оступаем
  5. const sliceRows = 1;
  6.  
  7. //Разделитель
  8. const del = ';';
  9.  
  10. // В какую папку сохраняем результат, URL
  11. const folderUrl = 'https://drive.google.com/drive/folders/1E8d_EFpeDJrO22nVFWaptoD-FpfV_tEa';
  12.  
  13. // На какие телеграм chat_id отправляем сообщение о том, что файл создан
  14. const ids = '320117024';
  15.  
  16. // Токен телеграм бота
  17. const botToken = "45783412";
  18.  
  19. // Charset
  20. const charset = 'Windows-1251';
  21.  
  22. ////////////////////
  23. function onOpen(e){
  24.   SpreadsheetApp.getUi()
  25.   .createMenu("/ меню запуска скриптов /")
  26.   .addItem("Активный лист --> CSV", "main")
  27.   .addToUi();
  28. }
  29. ////////////////////
  30.  
  31.  
  32. function main(){
  33.   const ss = SpreadsheetApp.getActive();
  34.   const sh = ss.getActiveSheet();
  35.   const blob = createNewBlob(sh, charset, 'text/csv');
  36.   const [url, name] = upload(blob, folderUrl);
  37.  
  38.   ids.split(",").map(g => sendMessage(g, `Привет, файл ${name} создан\n${url}`));  
  39. }
  40.  
  41. function createNewBlob(sh, charset, contentType){
  42.   let name = d2s(new Date, 'YYMMdd-HHmm-');
  43.   name += sh.getName() + '.CSV';  
  44.  
  45.   const d = sh.getDataRange()
  46.   .getValues()
  47.   .slice(sliceRows);
  48.  
  49.   const dFilter = filtered(d, cols);    
  50.   const preBlob = dFilter
  51.   .map(g => g.join(del))
  52.   .join('\n');
  53.  
  54.   return Utilities
  55.   .newBlob('')
  56.   .setDataFromString(preBlob, charset)
  57.   .setContentType(contentType)
  58.   .setName(name);
  59. }
  60.  
  61. function upload(blob, folderUrl){
  62.   const f =  DriveApp
  63.   .getFolderById(getIdFromUrl(folderUrl))
  64.   .createFile(blob);
  65.  
  66.   return [f.getUrl(), f.getName()];
  67. }
  68.  
  69. function d2s(date, f){return Utilities.formatDate(date, Session.getScriptTimeZone(), f)};
  70.  
  71. function filtered(array, cols){
  72.   return [].concat(...[array.map(row =>
  73.               [].concat(...cols.map(y =>
  74.                    row[y-1])))]);
  75. }
  76.  
  77. function sendMessage(chatId, text) {
  78.   let data = {
  79.     method: 'post',
  80.     contentType: 'application/json',
  81.     muteHttpExceptions: true,
  82.  
  83.     payload: JSON.stringify({
  84.       chat_id: chatId,
  85.       text: text,
  86.       parse_mode: "Markdown",
  87.  
  88.     })
  89.   }
  90.  
  91.   const u = `https://api.telegram.org/bot${botToken}/sendMessage`;  
  92.   console.log(UrlFetchApp.fetch(u, data));
  93. }
  94.  
  95.  
  96. function getIdFromUrl(url) {
  97.   return url.match(/[-\w]{25,}/);
  98. }
  99.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement