Creare un filtro predefinito

From The Document Foundation Wiki
< Macros‎ | Calc
Jump to navigation Jump to search
This page is a translated version of the page Macros/Calc/ba026 and the translation is 100% complete.
Other languages:
English • ‎español • ‎italiano

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

Note:
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.