Filtraggio di più colonne e filtraggio con espressioni regolari

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

Questa pagina fornisce una procedura macro di LibreOffice Basic che filtra due colonne e utilizza espressioni regolari. È un esempio tratto dal Capitolo 13 ("Calc come database") della Guida 7.0 Calc.

Descrizione

La procedura macro di seguito illustra un filtro che filtra due colonne e utilizza espressioni regolari. Nota che il metodo filter viene chiamato su un intervallo piuttosto che sul suo foglio in questo esempio.

Ad esempio, la macro seguente filtra un foglio di valutazione della classe nelle celle $Foglio1.A1:H11 in base ai punteggi del test n. 1 <= 90% e ai nomi degli studenti che iniziano con "B". Il foglio di calcolo collegato contiene tale foglio di valutazione.

Codice

 1Sub SimpleRangeFilter()
 2  Dim oSheet          ' Foglio da filtrare.
 3  Dim oRange          ' Intervallo da filtrare
 4  Dim oFilterDesc     ' Descrizione del filtro
 5  Dim oFields(1) As New com.sun.star.sheet.TableFilterField
 6  
 7  oSheet = ThisComponent.getSheets().getByIndex(0)
 8  oRange = oSheet.getCellRangeByName("A1:H11")
 9  
10  REM Se l'argomento è Vero, crea un 
11  REM filtro descrittore vuoto
12  oFilterDesc = oRange.createFilterDescriptor(True)
13
14  REM Imposta un campo per visualizzare le celle con contenuto che 
15  REM inizia con la lettera B.
16  With oFields(0)   
17    .Field = 0              ' Filtra la colonna A (Nomi degli studenti).
18    .IsNumeric = False      ' Usa una stringa, non un numero.
19    .StringValue = "b.*"    ' Ogni nome che inizia con una B.
20    .Operator = com.sun.star.sheet.FilterOperator.EQUAL
21  End With
22  REM Imposta un campo che richieda almeno una delle condizioni.
23  REM Questa nuova condizione richiede un valore inferiore a o 
24  REM uguale a 90.
25  With oFields(1)
26    .Connection = com.sun.star.sheet.FilterConnection.OR
27    .Field = 6              ' Filtrare la colonna G (gradi del test #1).
28    .IsNumeric = True       ' Usa un numero
29    .NumericValue = 90      ' Punteggi inferiori a 90
30    .Operator = com.sun.star.sheet.FilterOperator.LESS_EQUAL
31  End With
32
33  oFilterDesc.setFilterFields(oFields())
34  oFilterDesc.ContainsHeader = True
35  oFilterDesc.UseRegularExpressions = True
36  oRange.filter(oFilterDesc)
37End Sub

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