ciao Bart,

Alle 16:15, domenica 5 febbraio 2006, Bart Aimar ha scritto:
> Quesito:
>
> Come, usando una macro, copiare la formula da una cella e incollarla in
> altra posizione, ma facendo si che i riferimenti si adeguino alla
> nuova posizione.
> 
> Es:
> 
> In A1 ho la formula "= A3"
> la voglio copiare in B1, e vorrei che la formula diventasse "= B3".
> 
> (Ovvero come un normale copia/incolla...)
> 
> Con il dispatch è la cosa più semplice del mondo... ma lo escluderei per 
> ovvie ragioni.
> 
> 
> Se invece estraggo con l'api la formula da A1
> e poi la inserisco nella cella B1 avrò inevitabilmente un riferimento 
> assoluto..., ciè la cella B1 avrà sempre il riferimento ad A3... e non a 
> B3 come si vorrebbe...
> 
> Si potrebbero anche fare tutti i conti e modificare il riferimento... ma 
> se la formula è un pochino più complicata direi che diventa un incubo...
> 
> C'è qualche altra strada?

Potresti fare in due modi, anzi, tre :-) (per quel che ne so io ovviamente):

1) metodo copyRange
esempio (copia la cella A1 in B3):
-------------------
sub test
  oSheet = thisComponent.CurrentController.ActiveSheet
  oSrc = oSheet.getCellRangeByName("A1").RangeAddress
  oDest = oSheet.getCellRangeByName("B3").CellAddress
  oSheet.copyRange(oDest, oSrc)
end sub
-------------------
vedi documentazione IDL per ulteriori dettagli:
http://api.openoffice.org/docs/common/ref/com/sun/star/sheet/XCellRangeMovement.html#copyRange


2) metodo fillAuto - equivale al "trascinamento" con il mouse
esempio (riempie automaticamente le celle da B3 a B12 usando come base il 
contenuto della cella B3) :
-------------------
sub test
  oSheet = thisComponent.CurrentController.ActiveSheet
  oCellRange = oSheet.getCellRangeByName("B3:B12")
  oCellRange.fillAuto(com.sun.star.sheet.FillDirection.TO_BOTTOM, 1)
end sub
-------------------
anche qui vedi documentazione IDL per ulteriori dettagli
http://api.openoffice.org/docs/common/ref/com/sun/star/sheet/XCellSeries.html#fillAuto


3) Credo proprio che questa cosa si possa fare usando opportunamente i 
NamedRanges di cui si parlava alcuni gg fa.
Ricordi il "parametro oscuro"? :-)

        Parameter aPosition 
        specifies the base address for relative cell references.

ho avuto un'illuminazione e mi sono convinto che sia fatto apposta per questi 
casi :-)


saluti
Paolo M

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

Rispondere a