Mi è sembrato utile creare un branch di questa discussione per indagare
i metodi di ricerca di stringhe di testo all'interno di una sheet di calc.
La ragione è semplice... Ultimus, come strutturato, cerca spesso una
determinata stringa all'interno di una tabella, e i tempi sono maturi
per ottimizzarne il codice.
Paolo Mantovani ha scritto:
Alle 01:17, venerdì 2 marzo 2007, Bart Aimar ha scritto:
Io ti consiglierei di usare un ciclo di for percorrendo cella per cella
dal A1 all'ultima cella usata.
Per ciascuna cella un if che verifica la proprietà " colore di sfondo",
e se corrisponde a quello che cerchi lo modifica a "trasparente".
Probabilmente ci sono dei metodi migliori... ma questo è quello che farei.
Il concetto di base è quello, però un ciclo in tutte le celle usate può
diventare abbastanza oneroso dal punto di vista delle risorse.
Esistono dei metodi ottimizzati per selezionare le celle in base alle loro
caratteristiche di contenuto o formattazione, come ad esempio i metodi
dell'interfaccia XCellRangesQuery
In particolare ci sarebbe il metodo queryContentCells() che potrebbe servire
allo scopo.
Questo metodo prende un parametro numerico che specifica quale tipo di
contenuto cercare, ad es:
com.sun.star.sheet.CellFlags.HARDATTR
selects all explicit formatting, but not the formatting which is applied
implicitly through style sheets.
In ogni caso, nonostante sembrasse perfetto, il metodo non mi ha consentito di
ottenere il risultato atteso.
Funziona bene se si cercano contenuti semplici come STRING oppure VALUE o
FORMULA, ma con i formati non funge.
Pitonyak, al punto 6.24 del suo documento "Useful Macro...", affronta il
problema dell'efficienza delle ricerche di stringa... ma alla fine della
fiera perdo il filo del discorso, senza aver ben capito quale dei codici
proposti sia il più efficiente.
Inoltre non parla di sheet.CellFlags.STRING...
Dovendo trovare una stringa pensi che CellFlags sia un metodo efficiente?
Se lo é, hai qualche esempio di codice da sottoporre?
Io ho provato con questo codice (roba tua trovata in rete...)
Sub Trova_qualcosa
oSheet=ThisComponent.CurrentController.ActiveSheet
iCellAttr=com.sun.star.sheet.CellFlags.STRING
oQueryResult = ThisComponent._
CurrentSelection.queryContentCells(iCellAttr)
Print oQueryResult.count
End Sub
E questo mi dice quante stringhe ci sono nel range.
Ma se voglio cercare una stringa specifica?
Credo si debba usare CreateSearcDescriptor... ma in tal caso
oQueryResult mi è ancora utile?
O è meglio usare direttamente la funzione SimpleSheetSearch di Pitonyak?
Come vedi poche idee e ben confuse... :-)
Fortunatamente esiste un modo molto più efficiente e soprattutto funzionante
basato sul metodo getCellFormatRanges, che fa parte dell'interfaccia
XCellFormatRangesSupplier la quale è supportata da qualunque range di calc,
Dal nome non penso sia utile per cercare le stringhe...
(anche un'intera tabella è un range)
Ma questo è interessante... e sopratutto da non dimenticare!
Ciao
Bart
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]