Namokonov

fromSheetToCsvPdfXlsx

Feb 21st, 2021 (edited)
2,268
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //папка для сохранения файла, если не заполнено – файл будет сохранен в корень диска
  2. const folderUrl = '';
  3.  
  4. function onOpen(e) {
  5.   SpreadsheetApp.getUi()
  6.     .createMenu("🧞‍♂️ – скрипты")
  7.     .addItem("📊 сохранить лист в xlsx!", 'saveXlsx')
  8.     .addItem("📊 скачать лист в xlsx!", 'downloadXlsx')
  9.     .addSeparator()
  10.     .addItem("🗞 сохранить лист в pdf!", 'savePdf')
  11.     .addItem("🗞 скачать лист в pdf!", 'downloadPdf')
  12.     .addSeparator()
  13.     .addItem("📄 сохранить лист в csv!", 'saveCsv')
  14.     .addItem("📄 скачать лист в csv!", 'downloadCsv')
  15.     .addToUi();
  16. }
  17.  
  18. function saveXlsx() {
  19.   workWithSheet('save', 'xlsx')
  20. }
  21.  
  22. function savePdf() {
  23.   workWithSheet('save', 'pdf')
  24. }
  25.  
  26. function saveCsv() {
  27.   workWithSheet('save', 'csv')
  28. }
  29.  
  30. function downloadXlsx() {
  31.   workWithSheet('download', 'xlsx')
  32. }
  33.  
  34. function downloadPdf() {
  35.   workWithSheet('download', 'pdf')
  36. }
  37.  
  38. function downloadCsv() {
  39.   workWithSheet('download', 'csv')
  40. }
  41.  
  42. function workWithSheet(type, format) {
  43.   const ss = SpreadsheetApp.getActive();
  44.   const shActive = ss.getActiveSheet();
  45.   let shWork;
  46.  
  47.   if (format == 'xlsx') {
  48.     shWork = shActive.copyTo(ss);
  49.     shWork.getDataRange().setValues(shWork.getDataRange().getValues());
  50.     shWork.setName(`(to XLSX) ${shActive.getName()}`);
  51.     SpreadsheetApp.flush();
  52.   }
  53.  
  54.   const url = `https://docs.google.com/spreadsheets/export?id=${ss.getId()}&gid=${shWork ? shWork.getSheetId() : shActive.getSheetId()}&exportFormat=${format}`
  55.  
  56.   if (type == 'save') {
  57.     ss.toast(`URL-папки для сохранения можно изменить во 2ой строке кода`);
  58.  
  59.     const blob = getBlob(url);
  60.     const folder = folderUrl ? DriveApp.getFolderById(getIdFromUrl(folderUrl)) : DriveApp.getRootFolder();
  61.     const urlFile = folder.createFile(blob)
  62.       .setName(`${shActive.getName()}, ${d2s(new Date(), 'yy-MM-dd, hh-mm')}`).getUrl();
  63.  
  64.     ss.toast(urlFile, 'Ваш файл');
  65.   } else if (type == 'download') {
  66.     getDownload(url);
  67.   }
  68.  
  69.   if (shWork) {
  70.     Utilities.sleep(4000);
  71.     ss.deleteSheet(shWork);
  72.   }
  73.  
  74. }
  75.  
  76. function getDownload(convertUrl) {
  77.   var template = HtmlService.createTemplate(stringHtml);
  78.   template.url = convertUrl;
  79.   template = template.evaluate();
  80.  
  81.   SpreadsheetApp.getUi().showModelessDialog(template, 'Сохранение файла');
  82. }
  83.  
  84. function getBlob(url) {
  85.   var token = ScriptApp.getOAuthToken();
  86.   var response = UrlFetchApp.fetch(url, {
  87.     headers: {
  88.       'Authorization': 'Bearer ' + token
  89.     }
  90.   });
  91.   return response.getBlob();
  92. }
  93.  
  94. function getIdFromUrl(url) {
  95.   return url.match(/[-\w]{25,}/);
  96. }
  97.  
  98. function d2s(date, f = 'dd-MM-yy') {
  99.   return Utilities.formatDate(date, Session.getScriptTimeZone(), f)
  100. };
  101.  
  102. const stringHtml =
  103. `<!DOCTYPE html>
  104. <html>
  105.   <head>
  106.     <base target="_top">
  107.   </head>
  108.   <body>
  109.         <iframe src=<?= url ?> /iframe>
  110.   </body>
  111.  
  112. </html>`
Add Comment
Please, Sign In to add comment