El día 19/05/07, Ariel Constenla-Haile <[EMAIL PROTECTED]>
escribió:
Hola Alfredo,
Alfredo Mtz R. escribió:
> Que tal lista
>
> He hecho un macro que busca en una columna de una hoja de Calc cierto
> string
> y funciona muy bien; es mas o menos así:
>
> oDescBusca = oHojaBase.createSearchDescriptor()
> oDescBusca.SearchWords = True
> oDescBusca.setSearchString (aControl)
> oResultado = oHojaBase.findFirst(oDescBusca)
>
> Mi problema es que también necesito localizar el renglón en que se
> encuentra oResultado(la celda que contiene la cadena que busco) ya que
en
> esa misma fila se encuentran datos que quiero leer. Así que ¿Como hago
que
> me devuelva un Integer del numero de renglón?
>
> Les agradezco cualquier ayuda.
>
en mi página he puesto un ejemplo:
http://www.arielconstenlahaile.com.ar/ooo/calc.php
http://www.arielconstenlahaile.com.ar/ooo/docs/ARIEL_OOoBASIC_BUSCAR_REEMPLAZAR.ods
debes adaptarlo según el modo que realices la búsqueda.
Hay dos funciones para obtener el nombre GUI de la celda a partir de la
struct com.sun.star.table.CellAddress
En la semana veré si puedo agregarle más cosas (como buscar sólo
funciones, etc.)
Saludos,
Ariel.
Gracias Ariel, he visto tu codigo de "ARIEL_OOoBASIC_BUSCAR_REEMPLAZAR.ods"
y me ha sido de gran ayuda.
Ahora he escrito la siguiente función.
Function UbicaRenglon(NomHoja As String, Cadena As String, Columna As
String) As Long
Dim oHojaBase As Object
Dim oSearchDescriptor
oHojaBase = ThisComponent.Sheets.getByName(NomHoja)
oSearchDescriptor = oHojaBase.createSearchDescriptor()
' aControl = oDlg.Model.TextField1.Text
With oSearchDescriptor
.setSearchString(Cadena)
'.getSearchString(Cadena)
.SearchCaseSensitive = True
.SearchWords = False
'TRUE= sólo celdas que contengan esa cadena y NADA MÁS.
'FALSE= celdas que contengan la cadena como SUBCADENA.
End With
Dim oResultados, iCantResultados, sCadenaRangeAddresses$
oResultados = oHojaBase.findAll(oSearchDescriptor)
'iCantResultados = oResultados.Count
if IsNull(oResultados) then
UbicaRenglon = 0
else
sCadenaRangeAddresses = oResultados.RangeAddressesAsString
Renglon = Right(oResultados.RangeAddressesAsString, Len(
oResultados.RangeAddressesAsString) - 1 - InStr(
oResultados.RangeAddressesAsString, "." & Columna))
UbicaRenglon = val(Renglon)
end if
End Function
Esta función devuelve el renglón en donde se encuentra la "Cadena" que
buscamos en la hoja "NomHoja", podemos especificar de que "Columna" queremos
el resultado.
El único problema es que esta función no puede reconocer el texto de una
celda que es resultado de una formula; es decir si en la celda A1 hay
=Texto(20070419), la función no reconoce como texto a 20070419 y no lo
encuentra.
¿Saben como hacer que si pueda reconocerlo?
De nuevo gracias.
Alfredo.