Bart Aimar ha scritto:

Grazie Fabio per la sollecita risposta (la mia un po' meno...) ma io puntavo a pezzetti di codice già belli che pronti... :-)

:-)

Magari a delle Function "monolitiche" da richiamare dalle Sub Princpali
(o più banalmente da inserire con cut/paste all'interno del codice...)

ho cercato più che altro di farti capire quello che intendevo spiegandoti come si usa, altrimenti:
1) non impari mai
2) ricicli pezzi di cui non comprendi appieno il funzionamento
3) continuerebbe a tossicchiare l'applicativo :-)

[...]

**********  Quindi mi serve una mano !!!! *******

vediamo quello che si può fare, certo non posso prometterti nulla. Cercherò di fare quel che posso.
[...]

Mantengo invece qui una parte più generale....

quindi vediamo un po' di basi su come lavorare con le celle:
Dim Doc As Object ..zot...
...zot... Cell = Sheet.getCellByPosition(0, 0)

OK, ma se voglio individuare la cella usando un NOME di area?

Cell = Sheet.getCellByname("Area_uno") ' così 'ovviamente' non funziona...

Come si potrebbe fare?

getCellRangeByName

(Così funzionerebbe:

args7(0).Value = "Area_uno"
dispatcher.executeDispatch(doc, ".uno:GoToCell", "", 0, args7())
dispatcher.executeDispatch(doc, ".uno:Copy", "", 0, Array())

ma bisogna andarci "fisicamente"...)

stai però di nuovo usando il copia, nessuno ti vieta di farlo, io di solito non lo faccio perchè avendo il dato in una variabile posso farci sopra operazioni prima di riscriverlo ad esempio.

Contenuto = Cell.String 'assegno alla variabile Contenuto la stringa contenuta nella cella in questione ...zot.... Ora, abbiamo visto come
leggere la stringa contenuta in una cella. Se avessi voluto sapere la
formula? Al posto di Cell.String basta usare Cell.Formula per le
formule, Cell.Value per i valori numerici fai attenzione a cambiare
il formato della variabile però,

Questo è in generale un bel problema!
Spesso non so (non posso e non voglio) sapere che tipo di dati contiene
la cella...
Se la copio e la incollo non me ne devo preoccupare...  :-)

Potremmo impostare un complesso codice che vada a leggere il tipo di
contenuto etc.... ma direi che è più facile (e leggero per la CPU)
andarci "fisicamente", copiare, tornare e incollare dove serve.

Conosci qualche altro modo?

aspetta, puoi semplicemente analizzare il contenuto della cella e comportarti di conseguenza. C'è un esempio bello e pronto sul manuale di starbasic di sun in italiano.

Dim Doc As Object
Dim Sheet As Object
Dim Cell As Object

Doc = ThisComponent
Sheet = Doc.Sheets(0)

Cell = Sheet.getCellByPosition(1,1)
Cell.Value = 1000

Select Case Cell.Type
   Case com.sun.star.table.CellContentType.EMPTY
       MsgBox "Contenuto: vuoto"
   Case com.sun.star.table.CellContentType.VALUE
       MsgBox "Contenuto: valore"
   Case com.sun.star.table.CellContentType.TEXT
       MsgBox "Contenuto: testo"
   Case com.sun.star.table.CellContentType.FORMULA
       MsgBox "Contenuto: formula"
End Select

Quello che ti sconsiglio è il cambio di formato di variabile fatto fare varie volte automaticamente all'interprete basic, e questo perchè ho sperimentato di persona errori per procedure del genere dopo aver trasformato valori in stringhe, poi di nuovo in valori, poi di nuovo in stringhe, poi di nuovo in valori.... e ci è voluta l'abilità e la pazienza di Paolo Mantovani per riuscire a scovare l'errore nel mio codice.

Naturalmente ti ho postato un piccolo esempio di come leggere e scrivere singole celle ma puoi farlo con range di celle, richiamandoli per posizione o per nome (getCellRangeByName)

Anche qui non ho risolto... perché non ho ancora capito come registrare
un range in una variabile, e che tipo di dati contiene un range
(dovrebbe essere un Object...)

Ti incollo il codice riportato sempre sul manuale di starbasic per l'inserimento di una riga. Qui viene specificato un range:

Dim Doc As Object
Dim Sheet As Object
Dim CellRangeAddress As New com.sun.star.table.CellRangeAddress
Doc = ThisComponent

Sheet = Doc.Sheets(0)

CellRangeAddress.Sheet = 0
CellRangeAddress.StartColumn = 1
CellRangeAddress.StartRow = 1
CellRangeAddress.EndColumn = 2
CellRangeAddress.EndRow = 2

Sheet.insertCells(CellRangeAddress, com.sun.star.sheet.CellInsertMode.DOWN)



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Rispondere a