[Risolto] Macro filtro con piu' dati

Creare una macro - Scrivere uno script - Usare le API
Rispondi
Luka2017
Messaggi: 67
Iscritto il: giovedì 16 febbraio 2017, 11:59

[Risolto] Macro filtro con piu' dati

Messaggio da Luka2017 »

Buongiorno
non riesco ad inserire la possibilita' di inserire l filtro di dati in piu' colonne tramite questa macro.
Vorrei come in questo caso che la colonna g mi filtrasse la stringa "differenza" insieme alla colonna b con la stringa "TA"

Grazie Mille come sempre

Codice: Seleziona tutto

Sub Check_DIFF
Sheet3 = ThisComponent.Sheets(3)
If oDialogo2.getControl("CheckBox6").state = 1 Then
Dim oFields(0) As New com.sun.star.sheet.TableFilterField
oRange = Sheet3.getCellRangeByName("A1:G3000")
oFilterDesc = oRange.createFilterDescriptor(true)
With oFields(0)
     .Field = 6 ' colonna G, la numerazione parte da zero
     .IsNumeric = False ' Use a string, not a number.
     .StringValue = ".*DIFFERENZA.*"
     .Operator = com.sun.star.sheet.FilterOperator.EQUAL           
End With
With oFilterDesc
     .UseRegularExpressions = True
     .ContainsHeader = FALSE
     .setFilterFields(oFields())
End With
     oRange.filter(oFilterDesc)
End If     
End Sub
Open office 3.1 Windows 7
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Macro filtro con piu' dati

Messaggio da Gaetanopr »

Ciao, è semplice ti basta aggiungere un campo (Field), quindi la dichiarazione iniziale diventa

Codice: Seleziona tutto

Dim oFields(1) As New com.sun.star.sheet.TableFilterField
al posto di zero.
Il secondo campo verrà aggiunto indicando come connessione tra le 2 condizioni l'operatore logico AND, la macro diventa così:

Codice: Seleziona tutto

Sub Check_DIFF
Sheet3 = ThisComponent.Sheets(3)
If oDialogo2.getControl("CheckBox6").state = 1 Then
Dim oFields(1) As New com.sun.star.sheet.TableFilterField
oRange = Sheet3.getCellRangeByName("A1:G3000")
oFilterDesc = oRange.createFilterDescriptor(true)
With oFields(0)
     .Field = 6 ' colonna G, la numerazione parte da zero
     .IsNumeric = False ' Use a string, not a number.
     .StringValue = ".*DIFFERENZA.*"
     .Operator = com.sun.star.sheet.FilterOperator.EQUAL           
End With

With oFields(1)
     .Connection = com.sun.star.sheet.FilterConnection.AND
     .Field = 1 ' colonna B, la numerazione parte da zero
     .IsNumeric = False ' Use a string, not a number.
     .StringValue = ".*TA.*"
     .Operator = com.sun.star.sheet.FilterOperator.EQUAL           
End With

With oFilterDesc
     .UseRegularExpressions = True
     .ContainsHeader = FALSE
     .setFilterFields(oFields())
End With
     oRange.filter(oFilterDesc)
End If     
End Sub
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Luka2017
Messaggi: 67
Iscritto il: giovedì 16 febbraio 2017, 11:59

Re: Macro filtro con piu' dati

Messaggio da Luka2017 »

L'ho provato ma nella colonna b non filtra i valori con le lettere iniziali con scritto "TA" ma che sono all'interno del valore. Mentre differenza lo filtra bene
Open office 3.1 Windows 7
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Macro filtro con piu' dati

Messaggio da Gaetanopr »

Devi spiegarti meglio, deve filtrare solo con TA iniziale? perchè questo non l'hai scritto da nessuna parte o se nella cella è presente TA a prescindere dalla posizione? se non ti filtra può darsi che nella colonna G alla stessa riga non è presente DIFFERENZA quindi la riga non viene filtrata, se hai problemi allega un file altrimenti si perde solo tempo
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Luka2017
Messaggi: 67
Iscritto il: giovedì 16 febbraio 2017, 11:59

Re: Macro filtro con piu' dati

Messaggio da Luka2017 »

La macro che mi hai inoltrato, per quanto riguarda la colonna differenza è ok, mentre nella colonna b dove deve filtrare la parola ta mi elenca tutti i dati dove all'interno del valore è presente la parola ta, esempio: data, valuta. A me servirebbe gentilmente che la parola ta da filtrare fosse all'inizio del valore esempio: tavolo, tazza. Oppure tramite quest'altra macro

Codice: Seleziona tutto

Sub Search_ID
Dim LB
Dim oCell
Dim oFilterDesc
Dim oTextBox
Dim oFields(0) As New com.sun.star.sheet.TableFilterField2
Sheet = ThisComponent.Sheets(1)
oTextBox = oDialogo2.getControl("TextField3")
LB = oDialogo2.getControl("ListBox1")
LB.removeItems(0,LB.getItemCount())
Daric = UCase(oTextBox.Text)
c = Sheet.createCursor
c.gotoEndOfUsedArea(false)
LastRow = c.RangeAddress.EndRow + 1
CellRange = Sheet.getCellRangeByName("B2:B" & LastRow)
oFilterDesc = CellRange.createFilterDescriptor(True)

  With oFields(0)
      .Field = 0
      .Operator = com.sun.star.sheet.FilterOperator2.BEGINS_WITH
      .StringValue = Daric
  End With
oFilterDesc = CellRange.createFilterDescriptor(True)

With oFilterDesc
    .ContainsHeader = False
    .CopyOutputData = False
    .FilterFields2 = oFields()
   
End With   

CellRange.filter(oFilterDesc)
ranges = CellRange.queryVisibleCells()

If Ubound(ranges.RowDescriptions) > -1 Then
  ReDim Arr(0 To Ubound(ranges.RowDescriptions))
  Dim a(0 To Ubound(ranges.RowDescriptions))
  For Each oCell in ranges.Cells
        Arr(x) = oCell.CellAddress.Row
       a(x) = oCell.DataArray(0)
       x = x +1
  Next
   Dati = a
   svc = createUnoService("com.sun.star.sheet.FunctionAccess")
   Dati1 =  svc.callFunction("TRANSPOSE", Array(a))

   LB.getModel.StringItemList = Dati1(0)
End if   
   'Call RemoveSheetFilter()
End sub
se è possibile oltre a quello che filtra il Daric ,tramite l'attivazione di una checkbox mi filtra insieme la colonna g con il valore "differenza". Spero di averti fatto capire. Grazie mille
Open office 3.1 Windows 7
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Macro filtro con piu' dati

Messaggio da Gaetanopr »

Ti avevo detto di allegare un esempio, cioè un file .ods e non un'altra macro, comunque basta cambiare l'espressione regolare per filtrare le parole che iniziano per TA.
Questa parte

Codice: Seleziona tutto

 .StringValue = ".*TA.*"
devi cambiarla così

Codice: Seleziona tutto

 .StringValue = "TA.*"
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Luka2017
Messaggi: 67
Iscritto il: giovedì 16 febbraio 2017, 11:59

Re: Macro filtro con piu' dati

Messaggio da Luka2017 »

Si scusa se non ti ho allegato il file, ma sto scrivendo con il cellulare e il file cell'ho a lavoro.
Open office 3.1 Windows 7
Luka2017
Messaggi: 67
Iscritto il: giovedì 16 febbraio 2017, 11:59

[Risolto] Re: Macro filtro con piu' dati

Messaggio da Luka2017 »

Grazie mille come al solito
Open office 3.1 Windows 7
Rispondi