Cargar 1000 registros en una lista

Discute sobre la aplicación de hojas de cálculo

Cargar 1000 registros en una lista

Notapor verdeneruda » Mié Dic 16, 2009 10:29 pm

He realizado varias publicaciones en este foro, y poco a poco he encontrando como llenar una lista, como capturar la selección y otras varias cositas que he aprendido en este foro, en este momento debo llenar una lista de 11000 registros, actualmente la estoy llenando la lista con la instrucción:

for co1 = 1 to 678'oRango.Rows.getCount()
olstDatos.addItem( oHojaDatos.getCellByPosition(0,co1).getString, olstDatos.getItemCount)
co1 = co1 + 1
Next


o con esta tambien funciona

Do Until oHojaDatos.getCellByPosition(0,co1).getString = ""
olstDatos.addItem( oHojaDatos.getCellByPosition(0,co1).getString, olstDatos.getItemCount)
co1 = co1 + 1
Loop


Resulta que las dos para efectos de 0 a 500 registros funcionan perfectamente, pero cuando le quiero cargar + de 10.000 registros se bloquea aparentemente el programa y se demora aprox 40min, haciendo seguimiento al código se encontro que aparentemente la demora es por lo que gasta la rutina en cargar la lista.

Según lo anterior no se si ustedes me puedan ayudar con un metodo o instrucción que no se demore tanto cargandome la lista o que me pueda asignar directamente el rango de datos.

Con esta instrucción estoy recibiendo un Array con todos los datos pero no se como asignarlo a la lista si que se demore tanto, la intruccion es:

Data = oRango.getDataArray()

el código completo que estoy utilizando es:

Option Explicit
Dim olstDatos As Object
Public sValor As String
Dim oRango As Object
Dim Data() As Double
Dim oDlg As Object 'Define un objeto para llamar al Dialogo
Dim oHojaDatos As Object 'Define un objeto para Referirse a la Hoja de donde se traen los datos
Dim co1 As Long 'identifica el contador y la posición de columna
Dim oRegistros As Long

'Funcion Pricipal
Sub Main

oDlg = CargarDialogo( "dlgDatos" ) ' Llama la función
olstDatos = oDlg.getControl("lstDatos")
oHojaDatos = ThisComponent.getSheets.getByName("Fasecolda")
co1 = 1

'Referencia al rango A2:A10
oRango = oHojaDatos.getCellRangeByName("A2:A10420")
'Y lo seleccionamos
ThisComponent.getCurrentController.select(oRango)

Data = oRango.getDataArray()

for co1 = 1 to 678'oRango.Rows.getCount()
olstDatos.addItem( oHojaDatos.getCellByPosition(0,co1).getString, olstDatos.getItemCount)
co1 = co1 + 1
Next


' Do Until oHojaDatos.getCellByPosition(0,co1).getString = ""
' olstDatos.addItem( oHojaDatos.getCellByPosition(0,co1).getString, olstDatos.getItemCount)
' co1 = co1 + 1
' Loop

oDlg.execute()

sValor = olstDatos.getSelectedItem()

oDlg.dispose()


msgbox Svalor

'Coloca el valor seleccionado en la posición indicada
ThisComponent.getCurrentController.getActiveSheet.getCellByPosition(4,4).setString( sValor )

End Sub
sub CargueDos


for co1 = 679 to 1876'oRango.Rows.getCount()
olstDatos.addItem( oHojaDatos.getCellByPosition(0,co1).getString, olstDatos.getItemCount)
co1 = co1 + 1
Next
end sub


Function CargarDialogo( Nombre As String ) As Object
'Cargamos la librería Standard en memoria
DialogLibraries.LoadLibrary( "Standard" )
'Cargamos el cuadro de diálogo en memoria
CargarDialogo = CreateUnoDialog( DialogLibraries.Standard.getByName( Nombre ) )
End Function
Última edición por mauricio el Dom Ene 03, 2010 5:13 am, editado 1 vez en total
Razón: Cambiar titulo a minúsculas
JULIO JIMENEZ
OpenOffice 2.4 en Windows Xp
verdeneruda
 
Mensajes: 9
Registrado: Jue Dic 10, 2009 6:39 pm

Re: CARGAR 1000 REGISTROS EN UNA LISTA

Notapor mauricio » Jue Dic 17, 2009 5:10 am

Hola...

Si, hemos visto los diferentes mensajes del mismo tema, por favor, trata de darle seguimiento en un mismo hilo, gracias.

Prueba la alternativa que te muestro en el ejemplo anexo, con los mismos 10,000 registros ahora se tarda apenas unos segundos, creo que es la solución más viable si requieres usar un cuadro de dialogo, por favor, revisala y si te sirve, marca todos tus mensajes como resueltos.

Saludos
Adjuntos
Mostrar valores en ListBox_v2.ods
(39.92 KiB) 129 veces
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 6020
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX


Volver a Calc

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 5 invitados