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]

Rispondere a