via Macro: Importare Esportare Librerie Basic e Python

Creare una macro - Scrivere uno script - Usare le API
Rispondi
nickGiard
Messaggi: 65
Iscritto il: lunedì 14 maggio 2012, 22:04

via Macro: Importare Esportare Librerie Basic e Python

Messaggio da nickGiard »

Buon anno e buona continuazione
ho creato un' app in Calc che viene lanciata con l'apertura di un file di Avvio.ods e dal suo evento Open.
La macro basic di avvio copia due cartelle librerie Basic e una Python presenti in sotto cartelle del file di Avvio, portandole nella cartella delle macro personali (C:\Users\Helpidea\AppData\Roaming\LibreOffice\4\user\Scripts), così da caricarle e renderle accessibili agli eventi del foglio di lavoro che viene utilizzato e alle stesse macro nelle librerie.
Tutto funziona perfettamente, allora qual'è il problema??
Poichè tale app è utilizzata anche in enti pubblici soggetti alle regole dell' AgID (Agenzia Italia Digitale), queste prevedono la disabilitazione completa delle macro nei documenti di Office Automation :shock: :shock: .
Volendo fornite una maggior sicurezza ho provveduto a firmare il file di Avvio e le macro del modello del foglio di lavoro.
Resta il problema delle librerie Basic e Python, che sono delle cartelle che contengono file facilmenti accessibili e che non so come proteggerli o firmarli all'interno di LibreOffice (ovviamente rilascio anche uno zip in formato p7m).
Se qualcuno da dei suggerimenti ...
Ho pensato anche di incorporate tali librerie all'interno del file di Avvio, firmato e con le macro protette da password, e in ogni avvio esportarle via macro come cartelle nella cartella delle macro personali per ricreare il consueto ambiente di lavoro.
Mentre si trovano in internet svariati esempo sulla esportazione-importazione manuale di librerie Basic, non sono riuscito a trovare niente di utile da eseguire un Basic, chiedo anche qui aiuto ....
Il modulo Python non lo vedo nei file esportati come .fods, ma appare nel file .ods esaminato come zip nella cartella Scrips\python, anche qui qualche idea??
Grazie in anticipo a chi avrà letto questo argomento e avrà la forza di rispondermi :D :D
Nicola
Nicola con LibreOffice 7.1 (x64) su Windows 11
geovign
Messaggi: 217
Iscritto il: domenica 13 gennaio 2019, 11:19
Località: Modena

Re: via Macro: Importare Esportare Librerie Basic e Python

Messaggio da geovign »

Ciao @nikGiard,
prova a guardare le macro contenute nel documento che ho allegato; l'ho scaricato tempo addietro dal sito inglese qui. É un file creato da Bernard Marcelly.
I codici contenuti nel file creano/ripristinano backup dei moduli presenti nella libreria Standard in "Macro e dialoghi personali"; in sostanza copiano i moduli nella o dalla libreria Standard del documento.
Non so se sono propriamente inerenti il tuo quesito, ma forse ti possono dare qualche spunto.
Saluti
Geo
Allegati
StandardExportImport_en.odt
(20.33 KiB) Scaricato 77 volte
LibO 7 su LinuxMint 21
nickGiard
Messaggi: 65
Iscritto il: lunedì 14 maggio 2012, 22:04

Re: via Macro: Importare Esportare Librerie Basic e Python

Messaggio da nickGiard »

Grazie mille geovign per la sollecitudine della risposta.
Darò una attenta lettura delle macro.
Come ipotesi alternativa mi sono messo a studiare gli addon, estensione .oxt, per vedere se tale soluzione ha una gestione più "chiusa" del codice nei riguardi della sicurezza da attacchi informatici. Sarebbe interessante che della questione si facessero carico anche gli sviluppatori di LibreOffice, dando indicazioni su cosa potrebbe essere lo svilupo di codice "sicuro".
Buona continuazione
Nicola
Nicola con LibreOffice 7.1 (x64) su Windows 11
nickGiard
Messaggi: 65
Iscritto il: lunedì 14 maggio 2012, 22:04

Re: via Macro: Importare Esportare Librerie Basic e Python

Messaggio da nickGiard »

Grazie mille geovign per il tuo supporto.
Ho guardato il file che mi hai allegato, e questo mi ha dato lo spunto di cercare nella Bibbia di LibreOffice, ossia Pitonyak e ho trovato quello che mi era sfuggito.
Riporto per eventuali interessati che in OOME al Cap. 17. Library Management 17.3. Writing an installer a pag. 600 c'e Listing 523. Copy a library Sub AddOneLib, molto simile a quella di Bernard Marcelly.
Ispirandomi alle due, ho sviluppato la macro che allego per chiunque abbia necessità (da testare), che raggruppa le operazioni di ricopiare Librerie tra quelle di un documento e le Global:

Codice: Seleziona tutto

' ------------------------------------------------
' Valida solo per  le Librerie contenute nel Documento già Attivo
Sub Libr_ThisDocToMyMacros( sLibr$, Optional bCopyToMyMacros As Boolean, Optional bReadOnly As Boolean)
	' Ricopia una Libreria del ThisComponent in MyMacros, se bCopyToMyMacros = False il contrario
	If IsMissing(bCopyToMyMacros) Then bCopyToMyMacros = True
	If IsMissing(bReadOnly) Then bReadOnly = True
		
	' Origine e Destinazione
	Dim aBD_DestLibrs : aBD_DestLibrs = Array(GlobalScope.BasicLibraries, GlobalScope.DialogLibraries)
	Dim aBD_OrigLibrs : aBD_OrigLibrs = Array(BasicLibraries, DialogLibraries)
	If Not bCopyToMyMacros Then
		aBD_OrigLibrs = Array(GlobalScope.BasicLibraries, GlobalScope.DialogLibraries)
		aBD_DestLibrs = Array(BasicLibraries, DialogLibraries)
	End If
	
	Dim aDestLibrs ' Librerie Destinazione
	Dim aOrigLibrs ' Librerie Origine
	Dim i%, m%, aDestLibreria, aOrigLibreria, asModuli, sModulo$
	For i = 0 To 1 
		aDestLibrs = aBD_DestLibrs(i)
		aOrigLibrs = aBD_OrigLibrs(i)
		If aDestLibrs.hasByName(sLibr) Then
			aDestLibrs.setLibraryReadOnly(sLibr, False)
			aDestLibrs.removeLibrary(sLibr)
		End If
		' Crea la Libreria Destinazione
		aDestLibrs.createLibrary(sLibr)
		aDestLibrs.loadLibrary(sLibr)
		aDestLibreria = aDestLibrs.getByName(sLibr)
		' Moduli Origine
		aOrigLibreria = aOrigLibrs.getByName(sLibr)
		aOrigLibrs.loadLibrary(sLibr)
		asModuli = aOrigLibreria.ElementNames

		For m = 0 To UBound(asModuli)
			sModulo = asModuli(m)
			aDestLibreria.insertByName(sModulo, aOrigLibreria.getByName(sModulo))
		Next
		aDestLibrs.setLibraryReadOnly(sLibr, bReadOnly) ' Alla fine delle modifiche
	Next
End Sub
Quindi incorporando le Librerie Basic all'interno del file di Avvio, firmato e con le macro protette da password, e in ogni avvio esportarle via macro nelle macro personali posso ricreare il consueto ambiente di lavoro. Quindi una parte del problema può considerarsi risolto.

Resta il problema del modulo Python, come faccio a ricopiare via Basic un file modulo Python da \AppData\Roaming\LibreOffice\4\user\Scripts\python\MyModulo.py portandolo dentro il mio file di Avvio.ods e viceversa?

Ossia dovrei fare delle operazioni eseguite manualmente con APSO, il quale è scritto in Python in apso.py, che mi sembra molto complesso da implementare.
Una soluzione che mi viene in mente è di ricopiare brutalmente il codice Python dal file Avvio.ods.zip cartella Scripts\python\MyModulo.py usando comunque una funzione python e con librerie Python.
Altra soluzione, più elementare ma non mi sembra molto elegate, tenere il codice Python come testo in una cella del file di Avvio.ods e quindi ricopiarlo nella cartella degli script ..\4\user\Scripts\python con semplici funzioni Basic.

Ringrazio in anticipo chi volesse darmi suggerimenti.
Nicola
Nicola con LibreOffice 7.1 (x64) su Windows 11
geovign
Messaggi: 217
Iscritto il: domenica 13 gennaio 2019, 11:19
Località: Modena

Re: via Macro: Importare Esportare Librerie Basic e Python

Messaggio da geovign »

Felice di essere stato, in qualche modo, utile.
nickGiard ha scritto:Resta il problema del modulo Python, come faccio a ricopiare via Basic un file modulo Python da \AppData\Roaming\LibreOffice\4\user\Scripts\python\MyModulo.py portandolo dentro il mio file di Avvio.ods e viceversa?
Di python non ci capisco nulla, ma prova a dare una letta qui . La possibilità di inserire lo script python nel documento ods, se ho capito bene, esiste anche senza l'ausilio di APSO. Poi mi sono fermato, a te l'onore di continuare la lettura.
Saluti
Geo
LibO 7 su LinuxMint 21
Rispondi