Ordina una tabella usando una colonna

    From The Document Foundation Wiki
    < Macros‎ | Calc
    This page is a translated version of the page Macros/Calc/ba023 and the translation is 100% complete.


    Other languages:

    Questa pagina fornisce una procedura macro di LibreOffice Basic che ordina una tabella in base ai valori in una colonna. È un esempio tratto dal Capitolo 13 ("Calc come database") della Guida 7.0 Calc.

    Descrizione

    In una macro di Calc, i dati all'interno di un intervallo vengono ordinati chiamando il metodo sort() sull'oggetto intervallo. Quando viene chiamata un'operazione di ordinamento su un intervallo, un array di proprietà noto come descrittore di ordinamento viene passato al metodo sort. All'interno delle proprietà di un descrittore sono contenuti i "campi di ordinamento", che sono strutture che informano Calc su come ordinare un intervallo in base ai dati contenuti in una delle sue righe o colonne.

    Ad esempio, la macro seguente ordina un foglio di valutazione della classe nelle celle $Sheet1.A1:H11 in base al voto medio in ordine decrescente. Il foglio di calcolo collegato contiene tale foglio di valutazione. Attenzione: Il valore dell'indice Field della variabile SortField inizia con riferimento relativo all'intervallo selezionato. Per esempio, se l'intervallo selezionato comprende C1:H11, la colonna C ha come indice "field" 0.


    Codice

    Sub SortAverageGrade
      Dim oSheet
      Dim oRange
      Dim oSortFields(0) as new com.sun.star.util.SortField
      Dim oSortDesc(0) as new com.sun.star.beans.PropertyValue
    
      oSheet = ThisComponent.Sheets(0)
      REM Imposta l'intervallo su cui ordinare
      oRange = oSheet.getCellRangeByName("A1:H11")
    
      REM Ordina per il campo Voto medio nell'intervallo in ordine decrescente
      oSortFields(0).Field = 7
      oSortFields(0).SortAscending = FALSE
    
      REM Imposta i campi di ordinamento da utilizzare
      oSortDesc(0).Name = "SortFields"
      oSortDesc(0).Value = oSortFields()
      
      REM Ora ordina l'intervallo!
      oRange.Sort(oSortDesc())
    End Sub

    Questo Foglio di calcolo Calc contiene il codice soprastante Basic di LibreOffice.