Grid control con dati filtrati

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

Grid control con dati filtrati

Messaggio da Luka2017 »

Buongiorno
avrei necessità tramite la formula che vi allego, la possibilità di inserire all'interno del grid control i dati filtrati presenti in un foglio. Il problema che mi appare nella grid control solamente i dati filtrati presenti nella colonna "A" e non i dati presenti nelle colonne successive. Mi potete Aiutare? Grazie mille.

Codice: Seleziona tutto

Sub Grid_stand
Dim oCell
Dim oFilterDesc
Dim oTextBox
Dim Arr
dlgmodel = oDialogo11.getModel()
gridmodel = dlgmodel.createInstance("com.sun.star.awt.grid.UnoControlGridModel")
with gridmodel
.PositionX = 352
.PositionY = 35
.Width = 178
.Height = 172
end with  
  ' add columns
  columnmodel = gridmodel.ColumnModel
  
  col = columnmodel.createColumn()
  col.Title = "STAND"
  columnmodel.addColumn(col)
  
  col = columnmodel.createColumn()
  col.Title = "ID. COD."
  columnmodel.addColumn(col)
  
  col = columnmodel.createColumn()
  col.Title = "DESCRIZIONE"
  columnmodel.addColumn(col)
  
  col = columnmodel.createColumn()
  col.Title = "Q.TA'"
  columnmodel.addColumn(col)
If oDialogo11.getControl("TextField1").text <>"" Then
 dlgmodel.insertByName("grid", gridmodel)
  grid = oDialogo11.getControl("grid")
  oListener = (CreateUnoListener("grid_", "com.sun.star.awt.grid.XGridSelectionListener"))
grid.addSelectionListener(oListener)
datamodel = gridmodel.GridDataModel
Dim oFields(0) As New com.sun.star.sheet.TableFilterField2
Sheet = ThisComponent.Sheets(1)
oTextBox = oDialogo11.getControl("TextField1")
Daric = UCase(oTextBox.Text)
c = Sheet.createCursor
c.gotoEndOfUsedArea(false)
LastRow = c.RangeAddress.EndRow + 1
CellRange = Sheet.getCellRangeByName("A2:A" & 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
  datamodel.addRows(a, a)
End if
End if
End Sub
Ultima modifica di Luka2017 il martedì 30 luglio 2024, 22:12, modificato 2 volte in totale.
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Grid control con dati filtrati

Messaggio da patel »

Allega un file di esempio.
Non hai allegato una "formula" ma una MACRO
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Luka2017
Messaggi: 69
Iscritto il: giovedì 16 febbraio 2017, 11:59

Re: Grid control con dati filtrati

Messaggio da Luka2017 »

Buongiorno scusa il ritardo e invece di scrivere macro ho scritto formula. In allegato ti inserisco il file.

Grazie Mille
Allegati
test grid.ods
(16.12 KiB) Scaricato 98 volte
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8954
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Grid control con dati filtrati

Messaggio da charlie »

Rilancio.
charlie
macOS 14.6.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
geovign
Messaggi: 219
Iscritto il: domenica 13 gennaio 2019, 11:19
Località: Modena

Re: Grid control con dati filtrati

Messaggio da geovign »

Ciao Luka2017,
nella macro Sub Fitro_grid , sostituisci le righe

Codice: Seleziona tutto

For Each oCell in ranges.Cells
Arr(x) = oCell.CellAddress.Row
a(x) = oCell.DataArray(0)
x = x +1
Next
con

Codice: Seleziona tutto

For Each oCell in ranges.Cells
Arr(x) = oCell.CellAddress.Row
oRiga = Sheet.getRows.getByIndex(Arr(x))
a(x) = oRiga.DataArray(0)
x = x +1
Next
Il resto non cambia.
Saluti.
Geo
LibO v.24 su Manjaro
Luka2017
Messaggi: 69
Iscritto il: giovedì 16 febbraio 2017, 11:59

Re: Grid control con dati filtrati

Messaggio da Luka2017 »

Ciao Geo domani pomeriggio ci provo perché sono fuori. Sono certo che funziona e ti darò riscontro. Grazie mille :super:
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: Grid control con dati filtrati

Messaggio da unlucky83 »

Codice: Seleziona tutto

For Each oCell in ranges.Cells
        Arr(x) = oCell.CellAddress.Row
       a(x) = Sheet.getcellrangebyposition(0,Arr(x),4,Arr(x)).DataArray(0)
       x = x +1
  Next
Prova allegato
Allegati
test grid.ods
(27.19 KiB) Scaricato 89 volte
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Luka2017
Messaggi: 69
Iscritto il: giovedì 16 febbraio 2017, 11:59

Re: Grid control con dati filtrati

Messaggio da Luka2017 »

Ho provato e funziona benissimo. Un ultima cosa e non disturbo più. Spero!

Come faccio a far apparire nel textbox2 il nome della riga che ho selezionato?

Ti allego il file

Grazie Mille ;)
Allegati
test grid.ods
(23.06 KiB) Scaricato 88 volte
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: Grid control con dati filtrati

Messaggio da unlucky83 »

Non ho soddisfatto la tua richiesta a pieno.
Hai bisogno di aggiungere una macro per il listener che stai adoperando, quindi ti serve come minimo

Codice: Seleziona tutto

Sub grid_selectionChanged(oEvt)
...
End Sub
Visto che nel Dialog2 non esiste nessun oggetto di nome textbox2, ho preferito prepararti la seguente macro che è un punto di partenza utile per capire come popolare i campi che desidererai riempire. In un msgbox ho inserito i richiami ai vari campi della riga selezionata

Codice: Seleziona tutto

Sub grid_selectionChanged(oEvt)
dim indice
indice=oEvt.Source.CurrentRow
row_selected=datamodel.GetRowData(indice)
MsgBox "selected row: " & indice & chr(13) & "Cognome: " & row_selected(0) & chr(13) & "Nome: " & row_selected(1) & chr(13) & "Cod: " & row_selected(2) & chr(13) & "Descrizione: " & row_selected(3) & chr(13) &"Qtà: " & row_selected(4) 
End Sub
Allego esempio
Allegati
test grid.ods
(27.35 KiB) Scaricato 95 volte
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
geovign
Messaggi: 219
Iscritto il: domenica 13 gennaio 2019, 11:19
Località: Modena

Re: Grid control con dati filtrati

Messaggio da geovign »

Al quesito originale, hai invece risposto pienamente.
Luka2017 ha successivamente "integrato" il quesito con una nuova richiesta.
Saluti
Geo
LibO v.24 su Manjaro
Luka2017
Messaggi: 69
Iscritto il: giovedì 16 febbraio 2017, 11:59

Re: Grid control con dati filtrati

Messaggio da Luka2017 »

Grazie comunque ho risolto con questa macro.

Codice: Seleziona tutto

Sub grid_selectionChanged(oEvt)
indice=oEvt.Source.CurrentRow
row_selected=datamodel.GetRowData(indice)
oDialogo16.getControl("TextField1").Text = row_selected(1)
End Sub
Luka2017
Messaggi: 69
Iscritto il: giovedì 16 febbraio 2017, 11:59

Re: [Risolto] Grid control con dati filtrati

Messaggio da Luka2017 »

Buonasera,
A seguito di questa macro è possibile modificare il dato presente nel
oDialogo16.getControl("TextField1").Text
Per salvarlo nella cella che fa parte della riga selezionata nel grid control?
Grazie mille in anticipo
Rispondi