Il 29/11/2010 07:33, Bart Aimar ha scritto:
[...]
Ma come lo fa rimane per me un mistero, che neppure xray sembra capace
di indagare...


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

il metodo getPrintAreas() restituisce un array, ovvero una matrice o un vettore, insomma si tratta di un insieme di valori accessibili per mezzo di un indice.

mAreas() = oSheet.getPrintAreas()
aRangeAddress = mAreas(0)


Come per tutti gli array in Basic puoi eseguire un ciclo anche senza usare direttamente gli indici (ciclo For Each...)

mAreas() = oSheet.getPrintAreas()
For Each aRangeAddress in mAreas()
  xray aRangeAddress
Next




Certo che un paio di righe capaci di riconoscere l'esistenza di una
printAreas
costituita da selezioni multiple potrebbe evitare al povero ed
inaffidabile utente qualche frustrazione.

Intercettare la printarea "multipla" non è difficile, ma occorre decidere cosa fare poi...

In realtà io penso che la soluzione al problema non sia quella nel codice di esempio che ti ho postato.

Alla luce di quanto osservato fino ad ora riguardo ai limiti dell'esportazione "selezione", penso che la procedura seguente sia più indicata per ottenere l'esportazione del foglio corrente:

REM    *****    BASIC    *****

sub test
Dim mSheetAreas()

  oDoc = ThisComponent
  oSheets = oDoc.Sheets()
  oActiveSheet = oDoc.CurrentController.ActiveSheet()

  For Each oSh In oSheets
    If oSh.Name <> oActiveSheet.Name Then
      AppendItem(mSheetAreas(), Array(oSh.Name, oSh.PrintAreas()))
      oSh.PrintAreas() = Array()
    End If
  Next

    'parametri di esportazione
  Dim  mStoreOpts(1) 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"

  sUrl = "file:///home/paolo/Scrivania/test.pdf"
  oDoc.storeToURL(sURL, mStoreOpts())

  For Each mShArea In mSheetAreas()
    oSh = oSheets.getByName(mShArea(0))
    oSh.PrintAreas() = mShArea(1)
  Next

End Sub


'______________________________________________________________________________
Sub AppendItem(mList(), vItem)
Dim iMax As Long

  iMax = UBound(mList())
  iMax = iMax + 1
  Redim Preserve mList(iMax)
  mList(iMax) = vItem

End Sub

----------------------------------
ciao
Paolo


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Rispondere a