Pagine

sabato 2 novembre 2019

Fogli Google: Ordinare i fogli in ordine alfabetico

Nell'articolo MS Excel: Ordinare i fogli in ordine alfabetico è stato mostrato come, attraverso l'utilizzo di VBA (Visual Basic for Application) sia possibile ordinare i fogli di una cartella di lavoro di un documento MS ExcelGoogle Docs (Documenti Google) non supporta VBA (proprietario di Microsoft) ma utilizza Google Apps Script: un linguaggio di scripting basato su JavaScript che gira nella cloud. In questo articolo mostrerò come creare uno script all'interno di Fogli Google che consenta di ordinare i fogli presenti all'interno del documento.

I passi da seguire sono semplici:
  • Creare un nuovo foglio di lavoro o aprirne uno già esistente accedendo a Google Docs tramite la pagina https://docs.google.com/spreadsheets/u/0/;
    Fogli Google, creare un nuovo foglio di lavoro
    FIG 1 - Fogli Google, creare un nuovo foglio di lavoro
  • Dal menu Strumenti selezionare Editor di script;
    Google Docs, Editor di script
    FIG 2 - Google Docs, Editor di script
  • Cliccare su Progetto senza titolo quindi assegnare un nome al progetto e cliccare su OK;
    Google Docs, Nome Progetto
    FIG 3 - Google Docs, Nome Progetto
  • Copiare e incollare il seguente codice;
    function onOpen() {
      SpreadsheetApp.getUi().createMenu('Ordina Fogli')
        .addItem('Ordina dalla A alla Z', 'sortAtoZ')
        .addItem('Ordina dalla Z alla A', 'sortZtoA')
        .addItem('Ripristina ordine prec.', 'ripristina')
        .addToUi();
    }
    
    function sortAtoZ() {
      var ss = SpreadsheetApp.getActiveSpreadsheet(), old = [];  
      ss.getSheets().map ( function (d) {
        var name = d.getName();
        old.push(name);
        return name;
      }).sort().reduce ( function  (arr, e, j) {
        ss.setActiveSheet(ss.getSheetByName(e));
        ss.moveActiveSheet(j + 1);
        return arr;
      }, []);
      PropertiesService.getScriptProperties().setProperty('old', JSON.stringify(old));
    }
    
    function sortZtoA() {
      var ss = SpreadsheetApp.getActiveSpreadsheet(), old = [];  
      ss.getSheets().map ( function (d) {
        var name = d.getName();
        old.push(name);
        return name;
      }).sort().reverse().reduce ( function  (arr, e, j) {
        ss.setActiveSheet(ss.getSheetByName(e));
        ss.moveActiveSheet(j + 1);
        return arr;
      }, []);
      PropertiesService.getScriptProperties().setProperty('old', JSON.stringify(old));
    }
    
    function ripristina(range) {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var range = JSON.parse(PropertiesService.getScriptProperties().getProperty('old'));  
      range.reduce ( function  (arr, e, j) {
        ss.setActiveSheet(ss.getSheetByName(e));
        ss.moveActiveSheet(j + 1);
        return arr;
      }, []);
    }
    
  • Cliccare sul pulsante che rappresenta un insetto per eseguire il debug e il salvataggio del progetto e seguire le istruzioni a video per autenticare/autorizzare lo script;
    Google Docs, script debug
    FIG 4 - Google Docs, script debug
  • Chiudere e riaprire il foglio di lavoro. Apparirà un nuovo menu Ordina Fogli che consentirà di ordinare i fogli in maniera crescente (dalla A alla Z), decrescente (dalla Z alla A) o ripristinare l'ordine precedente all'ultima modifica.
    Google Docs, nuovo menu Ordina Fogli
    FIG 5 - Google Docs, nuovo menu Ordina Fogli


Come visibile dallo script, i nomi dei fogli vengono considerati come stringhe, ciò significa che se i nomi sono numeri questi vengono ordinati considerando l'ordine alfabetico e non il loro valore numerico.

Dal seguente link è possibile scaricare un file di testo contenente il codice dello script
DOWNLOAD






Nessun commento:

Posta un commento

I messaggi sono soggetti a moderazione da parte dell'amministratore prima della loro pubblicazione.