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 • ‎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.

Im-jabber.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

 1Sub SimpleSheetFilter()
 2  Dim oSheet       ' Foglio che conterrà il filtro.
 3  Dim oFilterDesc  ' Descrizione del filtro
 4  Dim oFields(0) As New com.sun.star.sheet.TableFilterField
 5  
 6  oSheet = ThisComponent.getSheets().getByIndex(0)
 7  
 8  REM Se l'argomento è Vero, crea un filtro descrittore vuoto
 9  REM Se l'argomento è False, crea un 
10  REM descrittore con le impostazioni precedenti.
11  oFilterDesc = oSheet.createFilterDescriptor(True)
12  
13  With oFields(0)
14    REM Potete usare la proprietà Connection per indicare
15    REM come collegarsi al campo precedente. Questo è
16    REM il primo campo, quindi non è obbligatorio.
17    '.Connection = com.sun.star.sheet.FilterConnection.AND
18    '.Connection = com.sun.star.sheet.FilterConnection.OR
19
20    REM La proprietà Field è la colonna in base zero
21    REM numero da filtrare. Se avete la cella,
22    REM allora potete usare .Field = oCell.CellAddress.Column.
23    .Field = 5	' Il campo dei voti del Quiz #2
24
25    REM Confronta usando un numero o una stringa?
26    .IsNumeric = True
27
28    REM Viene utilizzata la proprietà NumericValue 
29    REM perché .IsNumeric = True da prima.
30    .NumericValue = 80
31
32    REM Se IsNumeric era Falso, allora 
33    REM verrebbe utilizzata la proprietà StringValue.
34    REM .StringValue = " qualunque cosa"
35
36    REM Gli operatori validi includono EMPTY, NOT_EMPTY, EQUAL,
37    REM NOT_EQUAL, GREATER, GREATER_EQUAL, LESS,
38    REM LESS_EQUAL, TOP_VALUES, TOP_PERCENT,
39    REM BOTTOM_VALUES, e BOTTOM_PERCENT
40    .Operator = com.sun.star.sheet.FilterOperator.GREATER_EQUAL
41  End With
42  
43  REM Il descrittore di filtro supporta le seguenti
44  REM proprietà: IsCaseSensitive, SkipDuplicates,
45  REM UseRegularExpressions, 
46  REM SaveOutputPosition, Orientation, ContainsHeader, 
47  REM CopyOutputData, OutputPosition, e MaxFieldCount.
48  oFilterDesc.setFilterFields(oFields())
49  oFilterDesc.ContainsHeader = True
50  oSheet.filter(oFilterDesc)
51End Sub

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