Il 26/11/2010 08:26, Bart Aimar ha scritto:
[....]
L'idea sarebbe quella di appunto di leggere la printareas della sheet
attiva, e poi di riproporla come range da stampare!
scusa per il mega taglio ma volevo concentrarmi sulla questione principale.
Dunque siamo partiti dalla tecnica per esportare un range arbitrario in
PDF poi però mi hai detto che in realtà vorresti esportare la printarea.
(In fondo al post trovi il codice di esempio.)
Il fatto è che la printarea non è un semplice range in quanto può essere
formata da molti range diversi e potrebbe contenere anche la definizione
delle colonne / righe da ripetere.
Il comportamento dell'esportazione in PDF è ben documentato e appare
coerente fino a che si rimane sulle opzioni "tutto" o "pagine"
Quando si tratta di esportare una selezione la documentazione non dice
nulla (che io sappia) perciò ho fatto alcuni tentativi e ho notato
diverse incongruenze:
1) esportazione PDF su una selezione multipla:
non funziona. (esce un PDF vuoto)
La stessa selezione multipla (3 range diversi) impostata come printarea
e utilizzata in un'operazione di esporta PDF "tutto" da origine ad un
documento di 3 pagine, una per ciascun range.
2) esportazione PDF su una selezione singola di una sola cella:
viene stampato tutto il foglio (ma non vengono stampati gli altri fogli)
In sostanza una selezione di una sola cella viene interpretata come
"stampa il foglio selezionato"
Nel caso di una printarea di una sola cella invece viene stampata solo
quella cella e non il resto del foglio.
dato che la funzione di esportazione di una selezione presenta questi
limiti e incongruenze, forse sarebbe opportuno abbandonare la via
dell'esportazione "selezione" e realizzare qualcosa di più simile
all'esempio proposto da Andrew
In tutti i casi, per non sembrare taccagno, ti ho messo del codice di
esempio.
Il codice trasforma la definizione dele printareas in un range multiplo
e lo passa alla funzione di esportazione.
In realtà il codice esamina solo il caso in cui la printarea sia
costituita da un solo range.
In tutti gli altri casi viene stampato tutto
ciao
Paolo
----------------------------------
REM ***** BASIC *****
sub test
oDoc = ThisComponent
oSh = oDoc.CurrentController.ActiveSheet
Dim mFilterData(0) As New com.sun.star.beans.PropertyValue
'configurazione del filtro (viene usata più sotto)
If UBound(oSh.PrintAreas()) = 0 Then
'prepara il range (multiplo) da esportare:
oRanges = oDoc.createInstance("com.sun.star.sheet.SheetCellRanges")
oRanges.addRangeAddresses(oSh.PrintAreas(), True)
mFilterData(0).Name = "Selection"
mFilterData(0).Value = oRanges
End If
'parametri di esportazione
Dim mStoreOpts(2) As New com.sun.star.beans.PropertyValue
mStoreOpts(0).Name = "Overwrite"
mStoreOpts(0).Value = True
mStoreOpts(1).Name = "FilterName"
mStoreOpts(1).Value = "calc_pdf_Export"
mStoreOpts(2).Name = "FilterData"
mStoreOpts(2).Value = mFilterData()
sUrl = "file:///home/paolo/Scrivania/test.pdf"
oDoc.storeToURL(sURL, mStoreOpts())
end sub
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]