[RESUELTO]Averiguar fila del últ registro ... en otro libro

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
Chelo2
Mensajes: 103
Registrado: Mié Ago 14, 2013 4:25 am
Ubicación: Lomas de Zamora, Buenos Aires, Argentina

[RESUELTO]Averiguar fila del últ registro ... en otro libro

Mensaje por Chelo2 »

Federico aportó un ejemplo de lo que estaba buscando y funcionó perfecto. Pero quise hacer la adaptación de la macro para buscar lo mismo pero en otro libro ods y me da error.

No se si hay algo qyue estoy haciendo mal en la adaptación o si es que el código sirve sólo cuando se trata del mismo archivo.

El código adaptado es el siguiente:

Código: Seleccionar todo

Sub Buscar_2
Dim oDoc as Object, oHoja as Object
         
         cadena = InputBox("Dato a buscar ....", "Busqueda")
         
         Ruta= "\\WS34400009\D\OPEN_SUR\CAMBJURIS_PRUEBA.ods"

		oDoc = AbrirArchivo (Ruta, True, "02081938", 3, "False") '(Ruta, Oculto, password, con Macro, SoloLectura)
			
		'BUSCA EL CUIT EN LA BASE DE Cambios
		oHoja= oDoc.Sheets.getByName("Concluidos")
		'oHoja.isVisible = "True"
		
		oHoja.unProtect ( "02081938" )
		UltFila= UltimaFila(oHoja)+1
		'MsgBox "La fila es  "&UltFila
		oBuscarEn = oHoja.getCellRangeByName( "B2:B"+UltFila)
        
        document = oDoc.CurrentController.Frame
       	dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")     
     	dim args1(2) as new com.sun.star.beans.PropertyValue
    	args1(0).Name = "ToPoint"
   		args1(0).Value = oBuscarEn    '"$B$1:$B$11000"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

    	args1(0).Name = "SearchItem.CellType"
   		args1(0).Value = 1
    	args1(1).Name = "SearchItem.SearchString"
   		args1(1).Value = cadena
    	args1(2).Name = "SearchItem.Command"
   		args1(2).Value = 1

dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1())

        sele = oDoc.getCurrentSelection()
        consulta = sele.queryContentCells(21)
        filas = consulta.getCount - 1
        Fil = (sele(filas).getCellAddress.row + 1)
        msgbox Fil   
end sub
Adjunto el archivo donde habilité un segundo botón vinulado a esta macro.

Ya probé de todo... pero no doy en la tecla. Les agradezco cualquier sugerencia.

Un saludo desde Buenos Aires.

Chelo2
Adjuntos
UltimaFila_con_condicion.ods
(14 KiB) Descargado 205 veces
Última edición por Chelo2 el Mié Nov 01, 2017 5:43 pm, editado 1 vez en total.
OpenOffice 4.1.3 en Windows 7
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Averiguar fila del últ registro ... en otro libro ods

Mensaje por fornelasa »

A mi me funciona bien, entiendo que usas AOO 4.1.3
Asegúrate que haya una hoja llamada "Concluidos" en el archivo siguiente:

Código: Seleccionar todo

Ruta= "C:\Users\Federico\Downloads\CAMBJURIS_PRUEBA.ods"
¿Que error te marca?

En caso de ..... agrega esta linea:
Fil = (sele(filas).getCellAddress.row + 1)
oDoc.Close(true)
msgbox Fil
Saludos, Federico.
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Averiguar fila del últ registro ... en otro libro ods

Mensaje por mauricio »

¿Vi mal o ya no es necesario la ruta en formato URL?
______________________________________________
"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
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Averiguar fila del últ registro ... en otro libro ods

Mensaje por fornelasa »

ummm, es cierto, no lo había notado, pero en este caso funciona bien :D
Saludos.
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Chelo2
Mensajes: 103
Registrado: Mié Ago 14, 2013 4:25 am
Ubicación: Lomas de Zamora, Buenos Aires, Argentina

Re: Averiguar fila del últ registro ... en otro libro ods

Mensaje por Chelo2 »

Pude ver que funciona en otro libro siempre y cuando la hoja "Concluidos" sea la primera. Si no lo es da error. No encuentra el dato buscado, lo cual me hace pensar que no está buscando en "Concluidos".

El tema es que no me doy cuenta como modificar en el código que pasó Federico, para que busque en la Hoja "Concluidos" y no en la primera hoja.

Un saludo.

Chelo2
OpenOffice 4.1.3 en Windows 7
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Averiguar fila del últ registro ... en otro libro ods

Mensaje por mauricio »

No usen dispatcher, a la larga solo trae código más largo, difícil de mantener y depurar.

Los método de búsqueda están documentados:
https://wiki.openoffice.org/wiki/ES/Man ... reemplazar

Saludos
______________________________________________
"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
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Averiguar fila del últ registro ... en otro libro ods

Mensaje por fornelasa »

Adicionalmente a lo comentado por mauricio:
chelo2, estas sumando la fecha, la fecha no se suma :D
Insisto, en las pruebas que he hecho si funciona normalmente.
A ver así:

Código: Seleccionar todo

Sub Buscar_2
Dim oDoc as Object, oHoja as Object
         
         cadena = InputBox("Dato a buscar ....", "Busqueda")
         
         Ruta= "C:\Users\Federico\Downloads\CAMBJURIS_PRUEBA.ods"

		oDoc = AbrirArchivo (Ruta, True, "02081938", 3, "False") '(Ruta, Oculto, password, con Macro, SoloLectura)
			
		'BUSCA EL CUIT EN LA BASE DE Cambios
		oHoja= oDoc.Sheets.getByName("Concluidos")
		'oHoja.isVisible = "True"
		
		oHoja.unProtect ( "02081938" )
		UltFila= UltimaFila(oHoja)+1
		'MsgBox "La fila es  "&UltFila
		oBuscarEn = oHoja.getCellRangeByName( "B2:B"+UltFila)
        
        document = oDoc.CurrentController.Frame
       	dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")     
     	dim args1(2) as new com.sun.star.beans.PropertyValue
    	args1(0).Name = "ToPoint"
   		args1(0).Value = oBuscarEn'"$B$1:$B$11000"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

    	args1(0).Name = "SearchItem.CellType"
   		args1(0).Value = 1
    	args1(1).Name = "SearchItem.SearchString"
   		args1(1).Value = cadena
    	args1(2).Name = "SearchItem.Command"
   		args1(2).Value = 1

dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1())

        sele = oDoc.getCurrentSelection()        
        consulta = sele.queryContentCells(21)
        filas = consulta.RowDescriptions
        fila = UBound(filas)
        oDoc.Close(true)
        msgbox replace(filas(fila), "Fila ", "")
end sub
Saludos.
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Chelo2
Mensajes: 103
Registrado: Mié Ago 14, 2013 4:25 am
Ubicación: Lomas de Zamora, Buenos Aires, Argentina

Re: Averiguar fila del últ registro ... en otro libro ods

Mensaje por Chelo2 »

La última propuesta de Federico, funciona pero al igual que la anterior, sólo cuando la Hoja del otro libro donde quiero buscar, en este caso "Concluidos", sea la primera hoja y no haya una anterior.

Respecto de la propuesta de Mauricio que dijo se lo realizara con el método de búsqueda, fue mi primer intento hacerlo de esa manera, pero no logré seleccionar el último registro encontrado para poder sacar cual es el N° de fila. No se que habré hecho mal que mi pregunta original no quedó en el hilo y ahora no se puede ver.

Con respecto a lo de la suma de fechas ¿?¿?, no se a que te refieres porque no hay ninguna fecha en el código.. :lol:

Remito nuevamente un ejemplo de los dos libros con las diferentes alternativas propuestas, y la que intenté hacer con el descriptor de búsqueda y reemplazo, que si bien no quiero reemplazar nada, lo hice reemplazando por el mismo valor, en mi hipótesis de que quizá allí al llegar al último reemplazo, pudiera efectuar la selección, pero tampoco lo logré. Obviamente que algo o mucho debo estar haciendo mal pero no me doy cuanta por lo que agradecería si me lo pueden señalar.

Un saludo desde Buenos aires.

Chelo2
Adjuntos
Libro_2.ods
(9.71 KiB) Descargado 209 veces
UltimaFila_con_condicion.ods
(14.63 KiB) Descargado 219 veces
OpenOffice 4.1.3 en Windows 7
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Averiguar fila del últ registro ... en otro libro ods

Mensaje por fornelasa »

En el archivo "UltimaFila_con_condicion.ods" tienes un botón con texto que dice "Buscar en otro libro" que con los archivos que dice mi firma funciona correctamente, no importando la posición de la hoja, si es la primera, la ultima o en medio.
Entiendo que el Libro_2 es abierto, se localiza la fila y después se cierra, obvio, agrega esta instruccion arriba de msgbox replace(filas(fila), "Fila ", "")

Código: Seleccionar todo

oDoc.Close(true)
        msgbox replace(filas(fila), "Fila ", "")
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Chelo2
Mensajes: 103
Registrado: Mié Ago 14, 2013 4:25 am
Ubicación: Lomas de Zamora, Buenos Aires, Argentina

Re: Averiguar fila del últ registro ... en otro libro ods

Mensaje por Chelo2 »

Es rarísimo!!!... Tanto en mi notebook de mi casa, como la pc de mi oficina, en los dos lugares no me funciona y tiene el mismo comportamiento.

Me da el mensaje:

"No se encontró la expresión buscada."

y luego se posiciona en el MsgBox final y dice:

"Tipo de Dato o valor inadmisible. Indice fuera de área definida."

Si no cierro el Libro_2, puedo ver que el cursor queda posicionado en la Hoja1, como si la búsqueda la realizara en esa hoja y no en "Concluídos".

Por otra parte, si cambio la posición de la hoja "Concluidos" a la primera, ahí sí efectúa la búsqueda y me dice el n° de fila sin ningún error.

Todo sea por completar otros campos de la del último registro, para lo cual necesito saber el N° de fila. Salvo que haya otra forma que no estoy contemplando.

Por las dudas, dejo el hilo abierto por si surge alguna otra sugerencia.

Un saludo.

Chelo2
OpenOffice 4.1.3 en Windows 7
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Averiguar fila del últ registro ... en otro libro ods

Mensaje por fornelasa »

A ver así.
Asumo que abres Libro_2.ods, encuentras la fila y cierras otra vez el Libro_2.ods

Código: Seleccionar todo

Sub Buscar_2
Dim oDoc as Object, oHoja as Object
         
         cadena = InputBox("Dato a buscar ....", "Busqueda")
         
         Ruta= "C:\Users\Federico\Downloads\Libro_2.ods"

      oDoc = AbrirArchivo (Ruta, False, "", 3, "False") '(Ruta, Oculto, password, con Macro, SoloLectura)
         
      'BUSCA EL CUIT EN LA BASE DE Cambios
      oHoja= oDoc.Sheets.getByName("Concluidos")
      'oHoja.isVisible = "True"
      
      'oHoja.unProtect ( "" )
      UltFila= UltimaFila(oHoja)+1
      'MsgBox "La fila es  "&UltFila
      oBuscarEn = oHoja.getCellRangeByName( "B2:B"+UltFila)
       
        document = oDoc.CurrentController.Frame
          dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")     
        dim args1(2) as new com.sun.star.beans.PropertyValue
       args1(0).Name = "ToPoint"
         args1(0).Value = oBuscarEn'"$B$1:$B$11000"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

       args1(0).Name = "SearchItem.CellType"
         args1(0).Value = 1
       args1(1).Name = "SearchItem.SearchString"
         args1(1).Value = cadena
       args1(2).Name = "SearchItem.Command"
         args1(2).Value = 1

dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1())

        sele = oDoc.getCurrentSelection()       
        consulta = sele.queryContentCells(21)
        filas = consulta.RowDescriptions
        fila = UBound(filas)
      
       If fila = -1 Then       
       oDoc.Close(true)
       Exit Sub
       Else
       oDoc.Close(true)
        msgbox replace(filas(fila), "Fila ", "")
       End If
end sub
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Averiguar fila del últ registro ... en otro libro ods

Mensaje por fornelasa »

Según yo, es mas fácil usar una formula matricial para este trabajo, supongamos que en A1 anotamos el dato a buscar y en B1 queremos el resultado de la ultima coincidencia, entonces en B1 escribimos esta formula matricial:

Código: Seleccionar todo

=MAX(SI(A1='file:///C:/Users/Federico/Downloads/Libro_2.ods'#$Concluidos.B1:B240;FILA(B1:B240);""))
Algo como lo anterior debería funcionar.
Saludos, Federico.
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Chelo2
Mensajes: 103
Registrado: Mié Ago 14, 2013 4:25 am
Ubicación: Lomas de Zamora, Buenos Aires, Argentina

Re: Averiguar fila del últ registro ... en otro libro ods

Mensaje por Chelo2 »

Hola Federico.... Te cuento que la última propuesta tampoco funcionó dándome el mismo mensaje de que no encontraba la búsqueda. pero se ve que hoy me levanté con un poco más de luces que estos días... :lol: :lol: .y probé de activar la hoja en la que quería buscar:

Código: Seleccionar todo

'La activamos
	oDoc.getCurrentController.setActiveSheet(oHoja)
Y ahí SIIIIIIIIII ... funcionóooooo....

Te agradezco muchísimo tu aporte y tu compromiso con todos los integrantes del foro, aun con los que entendemos poco y nada de este mundo de la programación, pero tenemos ganas de aprender.

Un abrazo desde Argentina y pego el código completo por si alguna otra persona le puesa ser útil.

Código: Seleccionar todo

Sub Buscar_2
Dim oDoc as Object, oHoja as Object
         
	cadena = InputBox("Dato a buscar ....", "Busqueda")
         
	Ruta= "D:\Libro_2.ods"
	oDoc = AbrirArchivo (Ruta, False,, 3, "False") '(Ruta, Oculto, password, con Macro, SoloLectura)
         
	'BUSCA EL CUIT EN LA BASE DE Cambios
	oHoja= oDoc.Sheets.getByName("Concluidos")
	
	'La activamos
	oDoc.getCurrentController.setActiveSheet(oHoja)     

	UltFila= UltimaFila(oHoja)+1
	'MsgBox "La fila es  "&UltFila
	oBuscarEn = oHoja.getCellRangeByName( "B2:B"+UltFila)
       
	document = oDoc.CurrentController.Frame
	dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")     
	dim args1(2) as new com.sun.star.beans.PropertyValue
	args1(0).Name = "ToPoint"
    args1(0).Value = oBuscarEn'"$B$1:$B$11000"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

       args1(0).Name = "SearchItem.CellType"
         args1(0).Value = 1
       args1(1).Name = "SearchItem.SearchString"
         args1(1).Value = cadena
       args1(2).Name = "SearchItem.Command"
         args1(2).Value = 1

dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1())
       
       sele = oDoc.getCurrentSelection()       
       consulta = sele.queryContentCells(21)
       filas = consulta.RowDescriptions
       fila = UBound(filas)
      
       If fila = -1 Then       
       'oDoc.Close(true)
       Exit Sub
       Else
        msgbox replace(filas(fila), "Fila ", "")
       End If
        
        'VOLVEMOS A ACTIVAR LA HOJA 1
        oHoja= oDoc.Sheets.getByName("Hoja1")
      	'La activamos
		oDoc.getCurrentController.setActiveSheet(oHoja)
		'oDoc.Close(true)    
end sub
Chelo2
OpenOffice 4.1.3 en Windows 7
Responder