CaiusNelson

Google Multi-Sheet csv exporter

Jun 28th, 2023
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.65 KB | Software | 0 0
  1. function onOpen() {
  2. var ui = SpreadsheetApp.getUi();
  3. ui.createMenu('Export Sheets')
  4. .addItem('Export All Sheets as CSV', 'exportAllSheetsAsCSV')
  5. .addToUi();
  6. }
  7.  
  8. function convert2DArrayToCSV(data) {
  9. return data.map(row => row.join(',')).join('\n');
  10. }
  11.  
  12.  
  13. function exportAllSheetsAsCSV() {
  14. var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  15. var sheets = spreadsheet.getSheets();
  16.  
  17. // Get the "CSVs" folder in Google Drive or create it if it doesn't exist
  18. var parentFolderName = "CSVs";
  19. var parentFolder = getOrCreateFolder(parentFolderName);
  20.  
  21. // Create the subfolder "LibertyBelle" within the "CSVs" folder or retrieve it if it already exists
  22. var subfolderName = "CircleOfOrion";
  23. var subfolder = getOrCreateFolder(subfolderName, parentFolder);
  24.  
  25. // Set initial status in the Sheets status bar
  26. var progressStatus = 'Exporting Sheets: 0/' + sheets.length;
  27. spreadsheet.toast(progressStatus, 'Progress', -1);
  28.  
  29. for (var i = 0; i < sheets.length; i++) {
  30. var sheet = sheets[i];
  31. var name = sheet.getName();
  32. var csv = convertSheetToCSV(spreadsheet, sheet);
  33.  
  34. // Delete existing CSV file with the same name if found
  35. var existingFile = subfolder.getFilesByName(name + '.csv');
  36. while (existingFile.hasNext()) {
  37. var file = existingFile.next();
  38. subfolder.removeFile(file);
  39. }
  40.  
  41. // Create a new file within the subfolder
  42. subfolder.createFile(name + '.csv', csv);
  43.  
  44. // Update status in the Sheets status bar
  45. progressStatus = 'Exporting Sheets: ' + (i + 1) + '/' + sheets.length;
  46. spreadsheet.toast(progressStatus, 'Progress', -1);
  47. }
  48.  
  49. // Clear the status in the Sheets status bar
  50. spreadsheet.toast('', 'Progress', -1);
  51. }
  52.  
  53. function getOrCreateFolder(folderName, parentFolder) {
  54. var folders = parentFolder ? parentFolder.getFoldersByName(folderName) : DriveApp.getFoldersByName(folderName);
  55. if (folders.hasNext()) {
  56. return folders.next();
  57. } else {
  58. return parentFolder ? parentFolder.createFolder(folderName) : DriveApp.createFolder(folderName);
  59. }
  60. }
  61.  
  62. function convertSheetToCSV(spreadsheet, sheet) {
  63. var data = sheet.getDataRange().getValues();
  64. var csv = '';
  65.  
  66. for (var row = 0; row < data.length; row++) {
  67. for (var col = 0; col < data[row].length; col++) {
  68. var cellValue = data[row][col].toString();
  69.  
  70. if (cellValue.indexOf(',') !== -1 || cellValue.indexOf('"') !== -1 || cellValue.indexOf('\n') !== -1) {
  71. cellValue = '"' + cellValue.replace(/"/g, '""') + '"';
  72. }
  73.  
  74. csv += cellValue;
  75.  
  76. if (col < data[row].length - 1) {
  77. csv += ',';
  78. }
  79. }
  80.  
  81. csv += '\n';
  82. }
  83.  
  84. return csv;
  85. }
  86.  
Advertisement
Add Comment
Please, Sign In to add comment