[Risolto] macro per stampa insieme di fogli

Discussioni sull'applicazione per i fogli di calcolo
Rispondi
geovign
Messaggi: 215
Iscritto il: domenica 13 gennaio 2019, 11:19
Località: Modena

[Risolto] macro per stampa insieme di fogli

Messaggio da geovign »

Sera a tutti.
Devo eseguire la stampa di più fogli selezionati attraverso una macro (ad es. devo stampare i fogli da 1 a 3 con un solo comando) .
Mentre riesco a stampare un singolo foglio selezionato tramite il nome (vedi macro presenti nel file), non riesco a definire "il range" (l'insieme) dei fogli che dovrò stampare. I fogli dovranno essere esclusivamente identificati tramite il nome.
Qualcuno mi dà un aiuto con la macro?
Grazie
Geo

PS: Quando la discussione tratta di macro per calc, la sezione giusta è questa oppure personalizzazione/macro?
Allegati
Stampa.ods
(35.15 KiB) Scaricato 197 volte
Ultima modifica di charlie il mercoledì 13 marzo 2019, 7:44, modificato 2 volte in totale.
Motivazione: Inserita spunta verde
LibO 7 su LinuxMint 21
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: macro per stampa insieme di fogli

Messaggio da patel »

se i fogli sono pochi conviene ripetere le righe

Codice: Seleziona tutto

Sheet=Doc.Sheets.getByName("Fertilizzazioni")
Controller = Doc.getcurrentController
Controller.setActiveSheet(Sheet)
dispatcher.executeDispatch(document, ".uno:Print", "", 0, Array())
cambiando il nome del foglio
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
geovign
Messaggi: 215
Iscritto il: domenica 13 gennaio 2019, 11:19
Località: Modena

Re: macro per stampa insieme di fogli

Messaggio da geovign »

Sera Patel.
I fogli da stampare sono 6 (versione "small") o 10 (versione "large").
Nel caso la strada fosse impraticabile, è possibile non stampare alcuni fogli? O meglio, è possibile non stampare un foglio modificando qualche impostazione?
Geo
LibO 7 su LinuxMint 21
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: macro per stampa insieme di fogli

Messaggio da patel »

prova utilizzando un array di nomi

Codice: Seleziona tutto

sub prova_stampa
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
Doc=ThisComponent
arr = Array("Fertilizzazioni","Pagina1","Magazzino Fert") ' array di nomi
Controller = Doc.getcurrentController
For n = 0 to 2 ' <<<< 2 per 3 fogli, 3 per 4 fogli.....
  Sheet=Doc.Sheets.getByName(arr(n))
  Controller.setActiveSheet(Sheet)
  dispatcher.executeDispatch(document, ".uno:Print", "", 0, Array())
next
end sub
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
geovign
Messaggi: 215
Iscritto il: domenica 13 gennaio 2019, 11:19
Località: Modena

Re: macro per stampa insieme di fogli

Messaggio da geovign »

Grazie Patel,
ho provato la tua macro e funziona regolarmente, ma ho dovuto inserire una pausa nel ciclo, perchè altrimenti ottengo tre copie dello stesso documento (con f8 all'interno dell'editor basic non si nota il problema). Ottima l'idea dell'array di nomi associata ad un ciclo, non la conoscevo...
Ovviamente non sto mai fermo e girando per il web mi sono imbattuto in una macro che "costruisce" un range utilizzando celle di diversi fogli.
Ho provato a modificare la macro togliendo i riferimenti alle celle e lasciando solo i riferimenti ai diversi fogli, in modo tale da creare un range costituito da soli fogli. Ed ha funzionato, così ho aggiunto l'array ed il ciclo, come da macro di Patel, e questo è il risultato:

Codice: Seleziona tutto

Sub Test3

dim oRanges
dim oRange
dim oController
dim oDispatcher

oRanges = thiscomponent.createInstance("com.sun.star.sheet.SheetCellRanges")
arr = Array (0,1,2) ' array con indicato i fogli per indice

For n = 0 to 2 ' <<<< 2 per 3 fogli, 3 per 4 fogli..... li stampa in ordine di Array
  oRange = thiscomponent.sheets(arr(n))
  oRanges.addRangeAddress(oRange.RangeAddress, True)
next

oController = thiscomponent.currentcontroller
oController.select(oRanges)
oDispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
'oDispatcher.executeDispatch(oController.Frame, ".uno:PrintPreview", "", 0, Array()) 
oDispatcher.executeDispatch(oController.Frame, ".uno:Print", "", 0, Array()) 
'inserire riga per deselezionare i fogli (disattivare oRange)

End Sub
A me sembra funzionare e come, spesso mi capita, la sottopongo al vs parere.
Con queste linee di codice riesco a creare un "range" (selezione) di fogli per poi stamparlo, od eventualmente esportarlo, in una unica soluzione.
Nella macro, secondo me, manca solo l'ultima riga per togliere la selezione , in quanto, alla uscita della sub, i fogli restano selezionati. Secondo voi è necessario questo comando? Voi avete idea di come scriverlo?
Allego il file con le tre macro: (1)macro Patel modificata, (2)macro originale, (3)macro modificata da me; al primo foglio i due pulsanti associati alle macro 1 e 3.
Grazie ancora di tutto
Geo
Allegati
Stampa1.ods
(36.07 KiB) Scaricato 139 volte
LibO 7 su LinuxMint 21
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: macro per stampa insieme di fogli

Messaggio da patel »

geovign ha scritto: Ovviamente non sto mai fermo e girando per il web mi sono imbattuto in una macro che "costruisce" un range utilizzando celle di diversi fogli.
Mi puoi dare il link ?
L'ultima macro utilizza gli indici dei fogli, cosa che avevi escluso
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
geovign
Messaggi: 215
Iscritto il: domenica 13 gennaio 2019, 11:19
Località: Modena

Re: macro per stampa insieme di fogli

Messaggio da geovign »

Giusto Patel, ma la macro all'interno del documento l'ho modificata ed ora utilizza i nomi.
Il link spero di ritrovarlo; se non ricordo male, era il forum ufficiale tedesco. Appena lo ritrovo mando il link.
Comunque, come avrai letto, la macro originale la trovi nel file (sub Test2).
Geo
LibO 7 su LinuxMint 21
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: macro per stampa insieme di fogli

Messaggio da patel »

Grazie, basta cercare con google addRangeAddress e si trovano molti esempi
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
geovign
Messaggi: 215
Iscritto il: domenica 13 gennaio 2019, 11:19
Località: Modena

Re: [Risolto] macro per stampa insieme di fogli

Messaggio da geovign »

@patel
Non sono ancora riuscito a trovare la discussione in tedesco da te richiestami. Se effettivamente ti interessa continuo la ricerca.
Geo
LibO 7 su LinuxMint 21
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: macro per stampa insieme di fogli

Messaggio da patel »

patel ha scritto:Grazie, basta cercare con google addRangeAddress e si trovano molti esempi
scusami, pensavo di aver già fatto capire che ho già trovato tutto.
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
geovign
Messaggi: 215
Iscritto il: domenica 13 gennaio 2019, 11:19
Località: Modena

Re: [Risolto] macro per stampa insieme di fogli

Messaggio da geovign »

Ho capito male io. :knock:
A prestissimo.
Geo
LibO 7 su LinuxMint 21
Rispondi