El día 22/05/07, Alexandro Colorado <[EMAIL PROTECTED]> escribió:
Quoting "Alfredo Mtz R." <[EMAIL PROTECTED]>: > 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. No deberia ser integro ya que es un valor numerico? Lo importante seria revisar la documentacion de referencia tal como el tipo de valores en xCell. http://api.openoffice.org/docs/common/ref/com/sun/star/sheet/SheetCell.html http://api.openoffice.org/docs/DevelopersGuide/Spreadsheet/Spreadsheet.xhtml#1_3_1_5_Cells
Es verdad, aunque long no produce problemas, lo ideal es que fuese Integer. Saludos. Alfredo.
