Creare un filtro predefinito

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


    Other languages:

    Questa pagina fornisce una procedura macro di LibreOffice Basic che crea un semplice filtro predefinito. È un esempio tratto dal Capitolo 13 ("Calc come database") della Guida 7.0 Calc.

    Descrizione

    In una macro, il filtraggio di un intervallo di dati viene eseguito chiamando il metodo filter() sull'intervallo o sul foglio in cui è contenuto l'intervallo. Come un descrittore di ordinamento, un descrittore filtro contiene le impostazioni del filtro per il foglio corrente, ad esempio se la prima riga o colonna del foglio contiene intestazioni che non devono essere filtrate. Un descrittore di filtro può essere generato chiamando il metodo createFilterDescriptor() su un foglio o su un intervallo di celle:

    createFilterDescriptor(Vuoto)
    Crea un descrittore di filtro. Se il flag booleano Vuoto è impostato su VERO, viene creato un descrittore di filtro vuoto. Se Vuoto è FALSO, il descrittore viene riempito con le impostazioni precedenti dell'oggetto corrente (come un intervallo di database).

    Come con i descrittori di ordinamento, i descrittori di filtro possono essere creati utilizzando questo metodo, quindi modificati e passati come argomento al metodo di filtro. La seguente macro illustra questo processo creando un semplice filtro standard per il primo foglio in un documento.

    Note pin.svg

    Nota:
    Quando viene chiamato il metodo filter su un foglio, ogni riga vuota nel foglio viene nascosta. Quando filter viene chiamato su un intervallo, vengono nascoste solo le righe vuote nell'intervallo stesso.

    Codice

    Sub SimpleSheetFilter()
      Dim oSheet       ' Foglio che conterrà il filtro.
      Dim oFilterDesc  ' Descrizione del filtro
      Dim oFields(0) As New com.sun.star.sheet.TableFilterField
      
      oSheet = ThisComponent.getSheets().getByIndex(0)
      
      REM Se l'argomento è Vero, crea un filtro descrittore vuoto
      REM Se l'argomento è False, crea un 
      REM descrittore con le impostazioni precedenti.
      oFilterDesc = oSheet.createFilterDescriptor(True)
      
      With oFields(0)
        REM Potete usare la proprietà Connection per indicare
        REM come collegarsi al campo precedente. Questo è
        REM il primo campo, quindi non è obbligatorio.
        '.Connection = com.sun.star.sheet.FilterConnection.AND
        '.Connection = com.sun.star.sheet.FilterConnection.OR
    
        REM La proprietà Field è la colonna in base zero
        REM numero da filtrare. Se avete la cella,
        REM allora potete usare .Field = oCell.CellAddress.Column.
        .Field = 5	' Il campo dei voti del Quiz #2
    
        REM Confronta usando un numero o una stringa?
        .IsNumeric = True
    
        REM Viene utilizzata la proprietà NumericValue 
        REM perché .IsNumeric = True da prima.
        .NumericValue = 80
    
        REM Se IsNumeric era Falso, allora 
        REM verrebbe utilizzata la proprietà StringValue.
        REM .StringValue = " qualunque cosa"
    
        REM Gli operatori validi includono EMPTY, NOT_EMPTY, EQUAL,
        REM NOT_EQUAL, GREATER, GREATER_EQUAL, LESS,
        REM LESS_EQUAL, TOP_VALUES, TOP_PERCENT,
        REM BOTTOM_VALUES, e BOTTOM_PERCENT
        .Operator = com.sun.star.sheet.FilterOperator.GREATER_EQUAL
      End With
      
      REM Il descrittore di filtro supporta le seguenti
      REM proprietà: IsCaseSensitive, SkipDuplicates,
      REM UseRegularExpressions, 
      REM SaveOutputPosition, Orientation, ContainsHeader, 
      REM CopyOutputData, OutputPosition, e MaxFieldCount.
      oFilterDesc.setFilterFields(oFields())
      oFilterDesc.ContainsHeader = True
      oSheet.filter(oFilterDesc)
    End Sub

    Questo Calcolo foglio di calcolo contiene il codice soprastante Basic di LibreOffice.