Ho sistemato il codice.
Adesso prima elimina tutte le aree di stampa usando una sub esterna...
Ma la cosa continua a non piacermi...
Bernardini Lido ha scritto:
Io le ho eliminate tutte a mano con Formato -> Aree di Stampa -> Rimuovi
poi, finito di stampare rimuovo l' area selezionata con
oSheet.getActiveSheet().setPrintAreas(Array()) '(Questo mi ero dimenticato di
' metterlo nella tua macro)
Comunque una volta che hai sostituito tutte le aree di stampa esistenti
con il "nuovo" range, mi sembra inutile rimuoverlo... ma ho inserito
ugualmente la riga a scopo "didattico".
Ho fatto un po' di pulizia e riordinato... mi pare possa essere copiata
pari pari per infilarla nel wiki...
Prova il codice, guarda i commenti e dimmi cosa ne pensi...
ciao
Bart
---------------------------------------------------------------
REM questa macro esporta in pdf un range
REM predefinito in una sheet, ad esempio una fattura.
REM Il metodo può essere utilizzato con alcune varianti
REM per inviare il range ad una stampante.
Sub esporta_fattura_in_pdf
' Pare necessario prima cancellare tutte le aree
' di stampa esistenti sula Worksheet
' Allo scopo si richiama questa subroutine
Del_print_Areas
' Adesso, l'unica area di stampa rimasta è soltanto
' quella definita nel nostro range più sotto...
' il metodo non ci piace granché... perché modifica lo
' stato del documento... se qualcuno trova qualche sistema
' migliore ne scriva sulla lista [email protected]
Dim myProps(1) as New com.sun.star.beans.PropertyValue
'il valore di questo array va impostato a 1
' non capisco ma mi adeguo
oSheet = ThisComponent.CurrentController.ActiveSheet
'stiamo lavorando sulla Sheet attiva/corrente
oMycell = oSheet.getCellRangeByName("$j$5")
oNumero = oMycell.string
' print oNumero 'adesso hai una parte del nome
' potrebbe essere il numero della fattura
' allo stesso modo potresti prelevare il nome
' del cliente...
' adesso aggiungamo un po' di roba
oAnno = "2006" 'ad esempio
sCartella = Folder()
print sCartella
'Questa variabile chiama la funzione Folder()
'la quale apre una finestra nella quale puoi
'scegliere la cartella dove vuoi salvare il pdf.
' percorso e nome possono essere assemblati così...
sUrl= sCartella+ "/" + "Fattura_" +oNumero + "-" + oAnno + ".pdf"
' oppure come si preferisce...
Print sUrl 'così vedi il risultato
' qui scrivi il range da salvare/esportare
oRange = oSheet.getCellRangeByName("A1:E15").getRangeAddress()
ThisComponent.CurrentController.getActiveSheet().setPrintAreas(Array(oRange))
'ovvero queste 2 linee precedenti servono a selezionare
' un' area del foglio attivo 'in questo caso A1 E15
myProps(1).Name = "Selection"
myProps(1).Value = true
'queste due linee per salvare solo la parte selezionata
myProps(0).Name="FilterName"
myProps(0).Value = "Calc_pdf_Export" ' l'errore era qui...
thisComponent.storetoUrl(sUrl,myProps())
' Il range è stato adesso esportato in pdf
' ma se proprio non vogliamo lasciare tracce
' ricancelliamo l'area di stampa richiamando la
' solita sub
Del_print_Areas
End Sub
Sub Del_print_Areas 'questa sub cancella tutte le aree
' di stampa esistenti sulla Worksheet
' Scopiazzata con ampia licenza poetica da
' "Useful Macro Information For OpenOffice" di Andrew Pitonyak
' Author of original macro: Cor Nouws <[EMAIL PROTECTED]>
' on idea of David French
Dim oDoc as object
Dim oSheet as object
Dim oSheets
Dim i%
oDoc = Thiscomponent
oSheets = ThisComponent.Sheets
For i = 0 to oSheets.getCount() - 1
oSheet = ThisComponent.Sheets.getByIndex(i)
oSheet.setPrintareas(array())
Next
End Sub
Function Folder() ' funzione che fa scegliere e restituisce
' il percorso (la cartella) dove salvare il pdf
Dim oCartella as Object
Dim iAccetta as Integer
oCartella = CreateUnoService("com.sun.star.ui.dialogs.FolderPicker")
iAccetta = oCartella.Execute()
If iAccetta = 1 Then Folder() = oCartella.GetDirectory()
End Function
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]