TOP

Riorganizzazione delle tabelle (Unpivot) in LibreOffice Calc

YLC Utilities logo

Descrizione

A volte è necessario convertire una tabella a croce (pivot) in una tabella piatta. Questa procedura si chiama " raddrizzamento dei dati " (unpivot data) . In conseguenza di tale" raddrizzamento " otteniamo una tabella in cui tutti i dati simili sono in una colonna.

Il programma LibreOffice Calc non dispone di una funzionalità standard per convertire le tabelle pivot in " Piatto ", ma puoi scrivere tu stesso la procedura corrispondente. Vediamo come farlo.



Diamo un'occhiata all'immagine qui sotto per comprendere più chiaramente l'essenza del problema. A sinistra abbiamo una tabella sotto forma di matrice (tabella pivot) e a destra - una tabella normale con colonne (tabella piatta):

Quando espandi una tabella, decomprimi la coppia attributo-valore che è l'intersezione delle colonne nella tabella a matrice e le riorienti nelle colonne appiattite nella tabella piatta:

  • Valore (Values) (blu a sinistra) espande in una nuova colonna (blu a destra);
  • Attributi (Attributes) (verde a sinistra) vengono inoltre espansi in una nuova colonna (verde a destra) e duplicati in base alla nuova colonna di valori.
  • Codice StarBASIC per la procedura UnPivotTable

    Apri il menu Tools - Macros - Edit Macros..., seleziona Module1 e copia il seguente testo nel modulo:

    Sub UnPivotTable
      ' moonexcel.com.ua 
      Dim oBook        As Object
      Dim oActiveSheet As Object
      Dim oSelRange    As Object
      Dim oNewSheet    As Object
      
      Dim i                  As Long
      Dim iTopLabelRowCount  As Integer
      Dim iSideLabelColCount As Integer       
      
      oBook        = ThisComponent
      oActiveSheet = oBook.CurrentController.ActiveSheet
      oSelRange    = oBook.CurrentSelection
      
      ' Aggiungi un nuovo foglio 
      oBook.Sheets.insertNewByName("UnPivoted Table",0)
      oNewSheet = oBook.Sheets(0)
      
      ' Determina la dimensione delle intestazioni 
      iTopLabelRowCount  = InputBox(" Quante righe nell'intestazione superiore? ")
      iSideLabelColCount = InputBox(" Quante colonne nell'intestazione laterale? ")
                
      i = 0
         
      For r = (iTopLabelRowCount + 1) To oSelRange.Rows.Count
        For c = (iSideLabelColCount + 1) To oSelRange.Columns.Count            
                           
          For j = 1 To iSideLabelColCount              
            oNewSheet.getCellByPosition(j-1, i).Formula = oSelRange.getCellByPosition(j-1, r-1).Formula               
          Next j
                 
          For k = 1 To iTopLabelRowCount
            oNewSheet.getCellByPosition(j + k - 2, i).Formula = oSelRange.getCellByPosition(c-1, k-1).Formula
          Next k           
                             
          oNewSheet.getCellByPosition(j + k - 2, i).Formula = oSelRange.getCellByPosition(c-1, r-1).Formula
          i = i + 1                   
                
        Next c
      Next r
    End Sub
    

    Quindi chiudi Macro Editor e torna al foglio di lavoro in LibreOffice Calc. Seleziona l'intera tabella con le intestazioni in alto e a sinistra ed esegui la nostra nuova macro tramite il menu Tools - Macros - Run Macro...

    La macro inserirà un nuovo foglio con nome nella cartella di lavoro "UnPivoted Table" e quindi aggiungere una tabella nel nuovo formato. Con una tabella di questo tipo puoi eseguire qualsiasi analisi in LibreOffice Calc.

    Utilizzando l'estensione

    Puoi anche usare l'utility "Tabella pivot (Unpivot)" installando l'estensione YLC_Utilities.oxt .

    Successivamente, questa utilità sarà disponibile in tutti i file che verranno aperti in LibreOffice Calc.

    Articoli sull'argomento:

  • Riorganizzazione delle tabelle (Unpivot) in Excel