[Risolto]Grid control in finestra dialogo calc
[Risolto]Grid control in finestra dialogo calc
Salve a tutti.Ho trovato questa macro che permette di creare una tabella nelle finestre di dialogo di calc.Da quello che ho letto va creato tutto tramite codice, visto che nell'editor non è prevosto.Ho provato il codice è funziona bene.
Ora il mio obiettivo sarebbe visualizzare nella tabella i dati di un foglio.
Ci sono anche riuscito con un ciclo for next , ma dopo un certo numero di righe diventa lento.
C'È un sistema magari per passare un array e velocizzare la procedura?
Qualcuno sa dove potrei reperire esempi su questa funzionalità? Questo codice è tutto quello che ho trovato.
Dalle api sembrerebbe possibile anche filtrare i dati, ma senza esempi non so da dove iniziare.
Grazie a tutti.
Sub GridOnDialog()
dlg = CreateUnoDialog(DialogLibraries.Standard.Dialog1)
dlgmodel = dlg.getModel()
' create new grid control
gridmodel = dlgmodel.createInstance("com.sun.star.awt.grid.UnoControlGridModel")
with gridmodel
.PositionX = 10
.PositionY = 10
.Width = 150
.Height = 100
end with
' add columns
columnmodel = gridmodel.ColumnModel
col = columnmodel.createColumn()
col.Title = "Name"
columnmodel.addColumn(col)
col = columnmodel.createColumn()
col.Title = "Value"
columnmodel.addColumn(col)
' insert grid control to the dialog
dlgmodel.insertByName("grid", gridmodel)
' fill the grid with data
datamodel = gridmodel.GridDataModel
datamodel.addRow("a", Array("foo", 100))
datamodel.addRow("b", Array("bar", 200))
datamodel.addRow("c", Array("hoge", 300))
datamodel.addRow("d", Array("huga", 400))
dlg.execute()
dlg.dispose()
End Sub
Ora il mio obiettivo sarebbe visualizzare nella tabella i dati di un foglio.
Ci sono anche riuscito con un ciclo for next , ma dopo un certo numero di righe diventa lento.
C'È un sistema magari per passare un array e velocizzare la procedura?
Qualcuno sa dove potrei reperire esempi su questa funzionalità? Questo codice è tutto quello che ho trovato.
Dalle api sembrerebbe possibile anche filtrare i dati, ma senza esempi non so da dove iniziare.
Grazie a tutti.
Sub GridOnDialog()
dlg = CreateUnoDialog(DialogLibraries.Standard.Dialog1)
dlgmodel = dlg.getModel()
' create new grid control
gridmodel = dlgmodel.createInstance("com.sun.star.awt.grid.UnoControlGridModel")
with gridmodel
.PositionX = 10
.PositionY = 10
.Width = 150
.Height = 100
end with
' add columns
columnmodel = gridmodel.ColumnModel
col = columnmodel.createColumn()
col.Title = "Name"
columnmodel.addColumn(col)
col = columnmodel.createColumn()
col.Title = "Value"
columnmodel.addColumn(col)
' insert grid control to the dialog
dlgmodel.insertByName("grid", gridmodel)
' fill the grid with data
datamodel = gridmodel.GridDataModel
datamodel.addRow("a", Array("foo", 100))
datamodel.addRow("b", Array("bar", 200))
datamodel.addRow("c", Array("hoge", 300))
datamodel.addRow("d", Array("huga", 400))
dlg.execute()
dlg.dispose()
End Sub
Ultima modifica di maxrome84 il lunedì 27 febbraio 2017, 12:20, modificato 2 volte in totale.
Open Office 4 beta
windows 7
windows 7
Re: Grid controllata in finestra dialogo calc
Si purtroppo questa datagrill che poi non è altro che una listbox multicolonna non è prevista sull'editor, io la utilizzo su diversi files.
Allega il tuo file e spiega cosa vuoi ottenete
Allega il tuo file e spiega cosa vuoi ottenete
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Openoffice 4.1.13 su windows 10
Re: Grid controllata in finestra dialogo calc
Ora sono fuori, non posso allegarlo , il prima possibile lo farò.intanto cerco di spiegarmi.
Ho un foglio con una tabella e varie righe tipo:
Progressivo | Data | totale|
Quindi sotto queste intestazioni di colonna ho varie righe di dati.Ecco io vorrei riportare questa tabella nella dataGrill.
E dovrebbe essere abbastanza veloce la procedura visto che sono presenti svariare righe.
Grazie per la risposta.
Ho un foglio con una tabella e varie righe tipo:
Progressivo | Data | totale|
Quindi sotto queste intestazioni di colonna ho varie righe di dati.Ecco io vorrei riportare questa tabella nella dataGrill.
E dovrebbe essere abbastanza veloce la procedura visto che sono presenti svariare righe.
Grazie per la risposta.
Open Office 4 beta
windows 7
windows 7
Re: Grid controllata in finestra dialogo calc
Ecco il file di esempio come promesso.Questo è quello che voglio ottenere.L'unico inconveniente è che oltre un tot di righe diventa molto lento nel riempire la griglia.
Facendo un paragone con la listbox , io utilizzo una procedura che ora non ho sottomano che in pratica da un range di celle riempie un array e questo veniva passato alla listbox, rendendo il caricamento della lista immediato anche con 4000 - 5000 righe.
Inoltre sarei curioso anche del metodo per filtrare il gridmodel che mi sembra di aver letto fra le api-
grazie ancora per la pazienza.
Facendo un paragone con la listbox , io utilizzo una procedura che ora non ho sottomano che in pratica da un range di celle riempie un array e questo veniva passato alla listbox, rendendo il caricamento della lista immediato anche con 4000 - 5000 righe.
Inoltre sarei curioso anche del metodo per filtrare il gridmodel che mi sembra di aver letto fra le api-
grazie ancora per la pazienza.
- Allegati
-
- Senza nome 1.ods
- (15.65 KiB) Scaricato 285 volte
Open Office 4 beta
windows 7
windows 7
Re: Grid controllata in finestra dialogo calc
Invece del metodo add.row devi usare add.rowsmaxrome84 ha scritto:L'unico inconveniente è che oltre un tot di righe diventa molto lento nel riempire la griglia
cambia questa parte di macro
Codice: Seleziona tutto
for i = 2 to 5000
datamodel.addRow("a", Array(sheet.getcellByPosition(0,i).string , sheet.getcellByPosition(1,i).string , sheet.getcellByPosition(2,i).string ))
next i
Codice: Seleziona tutto
Arr() = sheet.getcellRangeByName("A2:C5000").GetDataArray
datamodel.addRows(Arr, Arr)
Cosa intendi per filtrare?maxrome84 ha scritto: Inoltre sarei curioso anche del metodo per filtrare il gridmodel che mi sembra di aver letto fra le api-
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Openoffice 4.1.13 su windows 10
Re: Grid controllata in finestra dialogo calc
Grazie infinite per l'aiuto!!! Appena posso lo testo ma è proprio quello che cercavo!!!
Per quanto riguarda il filtro ti linko la pagina dove ho trovato questo riferimento.
Però rileggendo bene forse si tratta solo di ordinare i dati per una determinata colonna. http://www.openoffice.org/api/docs/comm ... le-ix.html
In particolare XSortableMutableGridDataModel
Se posso chiederti un'ultima cosa, un array così ottenuto lo posso utilizzare anche per riempire una listbox tramite addItems? (Naturalmente di una sola colonna).
Per quanto riguarda il filtro ti linko la pagina dove ho trovato questo riferimento.
Però rileggendo bene forse si tratta solo di ordinare i dati per una determinata colonna. http://www.openoffice.org/api/docs/comm ... le-ix.html
In particolare XSortableMutableGridDataModel
Se posso chiederti un'ultima cosa, un array così ottenuto lo posso utilizzare anche per riempire una listbox tramite addItems? (Naturalmente di una sola colonna).
Open Office 4 beta
windows 7
windows 7
Re: Grid controllata in finestra dialogo calc
In questo modo non puoi devi sempre estrarti i dati della colonna e creare un array ad una dimensionemaxrome84 ha scritto: Se posso chiederti un'ultima cosa, un array così ottenuto lo posso utilizzare anche per riempire una listbox tramite addItems? (Naturalmente di una sola colonna).
Esempio:
Codice: Seleziona tutto
a= oSheet.getCellRangeByName("A2:A10").getdataarray
Dim Items(ubound (a))
for i = 0 to ubound (a)
Items(i) = a(i)(0)
next i
oListBox.addItems(a, 0)
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Openoffice 4.1.13 su windows 10
Re: Grid controllata in finestra dialogo calc
Grazie ancora!Ora l'ultima giuro! Nella tabella come ottengo la stringa di una cella? Ho trovato solamente come trovare l'indice della colonna.
Open Office 4 beta
windows 7
windows 7
Re: Grid controllata in finestra dialogo calc
la colonna ? come hai fatto ?
-------------------
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
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
Re: Grid controllata in finestra dialogo calc
Devi spiegarti meglio quando chiedi qualcosa, se vuoi sapere che dato contiene la colonna 2 sulla riga 2 ti basta fare in questo modo, gli indici iniziano da 0, quindi (1, 1) sta per colonna 2 e riga 2.
Se invece vuoi ottenere il dato selezionato(il caso più frequente e più utile) bisogna attivare un listener sul datagril e tramite questo si può ricavare tutto sulla riga selezionata.
Codice: Seleziona tutto
datamodel.getCellData(1, 1)
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Openoffice 4.1.13 su windows 10
Re: Grid controllata in finestra dialogo calc
ma l'unica possibilità di selezione è la riga, quindi sarà possibile solo visualizzare tutte le celle della riga
-------------------
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
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
Re: Grid controllata in finestra dialogo calc
Scusate, volevo dire riga all'ultimo post!
E si avrei bisogno di conoscere il dato della prima colonna della riga selezionata.
Scusate avevo scritto di fretta e non mi sono accorto che non ero stato chiaro
E si avrei bisogno di conoscere il dato della prima colonna della riga selezionata.
Scusate avevo scritto di fretta e non mi sono accorto che non ero stato chiaro
Open Office 4 beta
windows 7
windows 7
Re: Grid control in finestra dialogo calc
Ho modificato la macro sistemando pure l'errore che si ha all'inizio in quanto mancava la parte che carica la libreria per il dialogo.
Se vuoi ottenere i dati delle altre colonne basta cambiare l'indice di colonna da 0 a seguire
Codice: Seleziona tutto
REM ***** BASIC *****
Dim oListener As Object
Dim grid, datamodel As Object, dlg
Sub GridOnDialog()
DialogLibraries.LoadLibrary( "Standard" )
dlg = CreateUnoDialog(DialogLibraries.Standard.Dialog1)
dlgmodel = dlg.getModel()
document = thisComponent
sheets=document.sheets
sheet = sheets.getByName("Foglio1")
' create new grid control
gridmodel = dlgmodel.createInstance("com.sun.star.awt.grid.UnoControlGridModel")
with gridmodel
.PositionX = 10
.PositionY = 10
.Width = 150
.Height = 100
end with
' add columns
columnmodel = gridmodel.ColumnModel
col = columnmodel.createColumn()
col.Title = "NUMERO"
columnmodel.addColumn(col)
col = columnmodel.createColumn()
col.Title = "DATA"
columnmodel.addColumn(col)
col = columnmodel.createColumn()
col.Title = "TOTALE"
columnmodel.addColumn(col)
' insert grid control to the dialog
dlgmodel.insertByName("grid", gridmodel)
grid = dlg.getControl("grid")
oListener = (CreateUnoListener("grid_", "com.sun.star.awt.grid.XGridSelectionListener"))
grid.addSelectionListener(oListener)
' fill the grid with data
datamodel = gridmodel.GridDataModel
Arr() = sheet.getcellRangeByName("A2:C28").GetDataArray
datamodel.addRows(Arr, Arr)
' datamodel.addRow("b", Array("bar", 200))
'datamodel.addRow("c", Array("hoge", 300))
'datamodel.addRow("d", Array("huga", 400))
dlg.execute()
dlg.dispose()
End Sub
Sub grid_disposing(ev)
MsgBox "chiusura datagrid"
End Sub
Sub grid_selectionChanged(ev)
Dim rows()
rem riga che scatena l'evento
rows = ev.Source.getSelectedRows()
msgbox datamodel.getRowData(rows(0))(0)
End Sub
Codice: Seleziona tutto
datamodel.getRowData(rows(0))(1)
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Openoffice 4.1.13 su windows 10
Re: Grid control in finestra dialogo calc [RISOLTO]
Grazie ancora, perfetto! Inserisco risolto nel titolo
Open Office 4 beta
windows 7
windows 7
Re: Grid control in finestra dialogo calc
viewtopic.php?f=2&t=5661
È così che si mette Risolto
È così che si mette Risolto
charlie
macOS 14.3 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
macOS 14.3 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org