@IgorSerenkov

Как дописать цикл?

Просьба дописать цикл для скрипт, что бы он проходился по всем листам и сохранял их в файлы

function onOpen() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var csvMenuEntries = [{name: "export as csv files", functionName: "saveAsCSV"}];
  ss.addMenu("csv", csvMenuEntries);
};

function saveAsCSV() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheets = ss.getSheets();
    var ssid = ss.getId();

    var fileInDrive = DriveApp.getFileById(ssid);
    var folderInDrive = fileInDrive.getParents().next().getId();
    
    for (var i = 0 ; i < sheets.length ; i++) {
      var sheet = sheets[i];
      filename = ss.getName() + sheet.getName() + ".csv";     
      
    }   
    
    var csv = "";
    var v = SpreadsheetApp
            .getActiveSpreadsheet()
            .getActiveSheet()
            .getDataRange()
            .getDisplayValues();
    
    v.forEach(function(e) {
      csv += e.join(";") + "\n";
    });
    

    
    var url = DriveApp.getFolderById(folderInDrive)    
              .createFile(filename, csv, MimeType.CSV)
              .getDownloadUrl()
              .replace("?e=download&gd=true","");
    return url;
}
  • Вопрос задан
  • 79 просмотров
Решения вопроса 1
oshliaer
@oshliaer Куратор тега Google Apps Script
Google Products Expert
Вам нужно добавить данные о листе в цикл и из цикла вызывать генерацию файла

function onOpen() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var csvMenuEntries = [{ name: 'export as csv files', functionName: 'userActionSaveAllSheetsAsCSV' }];
  ss.addMenu('csv', csvMenuEntries);
}

function userActionSaveAllSheetsAsCSV() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ss.getSheets();
  var ssid = ss.getId();

  var fileInDrive = DriveApp.getFileById(ssid);
  var folderInDrive = fileInDrive.getParents().next().getId();

  const urls = sheets.map((sheet) => {
    const filename = `${sheet.getParent().getName()} ${sheet.getName()}.csv`;
    const array = sheet.getDataRange().getValues();
    const url = saveArrayToCSV_(array, filename, folderInDrive);
    return { url, filename, folderInDrive };
  });

  console.log(JSON.stringify(urls, null, '  '));
}

/**
 * @param {string[][]} array
 * @param {string} filename
 * @param {string} folderInDrive
 * @returns {string} The file url
 */
function saveArrayToCSV_(array, filename, folderInDrive) {
  const data = array.map((row) => row.join(';')).join('\n');
  const url = DriveApp.getFolderById(folderInDrive)
    .createFile(filename, data, 'text/csv')
    .getDownloadUrl()
    .replace('?e=download&gd=true', '');
  return url;
}


Результатом работы программы являются файлы, а также можно получить лог с именами файлов, идентификатором папки и ссылками.

620deb5b1701d349092522.png

Ссылка на живой пример https://docs.google.com/spreadsheets/d/1A0ytCgO-v0...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы