[Risolto]Salva file con nome in una cella e percorso automat

Creare una macro - Scrivere uno script - Usare le API
Rispondi
solari77
Messaggi: 18
Iscritto il: domenica 13 giugno 2021, 10:59

[Risolto]Salva file con nome in una cella e percorso automat

Messaggio da solari77 »

Ciao a tutti, avrei bisogno di un piccolo aiuto

Attualmente utilizzo questa macro per esportare sul desktop il foglio di lavoro attivo convertito in PDF

Codice: Seleziona tutto

sub SalvaPDF
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "URL"
args1(0).Value = "file:///C:/Users/user/Desktop/presenze.pdf"
args1(1).Name = "FilterName"
args1(1).Value = "calc_pdf_Export"
dispatcher.executeDispatch(document, ".uno:ExportDirectToPDF", "", 0, args1())
end sub
ora vorrei fare una piccola modifica e salvare il file con un nome specifico presente all'interno di una cella.
il nome completo come salvare dovrebbe essere il nome del file concatenato con il valore presente nella cella T2.
Oltre a questo essendo il file presente sul cloud, vorrei che prendesse in automatico il percorso dove salvare e non in uno indicato nella macro.

Qualcuno mi può aiutare ?
Grazie
Ultima modifica di solari77 il domenica 21 novembre 2021, 14:34, modificato 2 volte in totale.
OpenOffice 3.1 su Windows Vista
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Salva file con nome presente in una cella e percorso aut

Messaggio da patel »

allega un file di esempio
-------------------
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
solari77
Messaggi: 18
Iscritto il: domenica 13 giugno 2021, 10:59

Re: Salva file con nome presente in una cella e percorso aut

Messaggio da solari77 »

Eccolo.
premendo sul pulsante dovrebbe salvare il file con il nome "Presenze" + il valore presente all'interno della cella T2:Y2.
Inoltre il percorso di salvataggio che io ho inserito nel codice dovrebbe essere sostituito con il percorso Desktop del Pc dove viene eseguito.Il file si trova all'interno del cloud OneDrive e quindi dovrei ricavare il percorso Desktop del PC e salvarlo li.
Allegati
presenze.ods
(23.56 KiB) Scaricato 118 volte
OpenOffice 3.1 su Windows Vista
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Salva file con nome presente in una cella e percorso aut

Messaggio da patel »

per ottenere i percorso del file che stai utilizzando puoi provare questa macro

Codice: Seleziona tutto

sub percorsofile
Dim oPathSettings
oPathSettings = CreateUnoService("com.sun.star.util.PathSettings")
print thiscomponent.geturl() ' documento corrente
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
solari77
Messaggi: 18
Iscritto il: domenica 13 giugno 2021, 10:59

Re: Salva file con nome presente in una cella e percorso aut

Messaggio da solari77 »

Ciao patel , grazie per la cortese risposta.
La macro indicata mi fà apparire un puop-up con scritto il percorso del file.
Io purtroppo non sò come adattarlo al mio caso
OpenOffice 3.1 su Windows Vista
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Salva file con nome presente in una cella e percorso aut

Messaggio da patel »

prova così

Codice: Seleziona tutto

sub SalvaPDF
rem ----------------------------------------------------------------------
rem define variables
dim document   as object, oPathSettings  as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
oPathSettings = CreateUnoService("com.sun.star.util.PathSettings")
rem ----------------------------------------------------------------------
dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "URL"
args1(0).Value = thiscomponent.geturl()
args1(1).Name = "FilterName"
args1(1).Value = "calc_pdf_Export"
' ------- continua ----
-------------------
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
solari77
Messaggi: 18
Iscritto il: domenica 13 giugno 2021, 10:59

Re: Salva file con nome presente in una cella e percorso aut

Messaggio da solari77 »

Ciao, sempre grazie per le risposte.
Cosi non fà nulla, non salva nessun file esportato in PDF
OpenOffice 3.1 su Windows Vista
Avatar utente
lucky63
Volontario assiduo
Volontario assiduo
Messaggi: 2997
Iscritto il: martedì 18 maggio 2010, 17:01

Re: Salva file con nome presente in una cella e percorso aut

Messaggio da lucky63 »

.
L'istruzione “ThisComponent.GetUrl()” restituisce URL (Percorso/NomeFile.estensione) della posizione da cui viene lanciato il file.
Se il tuo file è caricato sul cloud OneDrive restituirà un URL che non ha nulla a che fare con qualsiasi posizione del tuo PC.

Se sul desktop del PC riesci a creare un collegamento al file presente su OneDrive in modo che cliccandoci sopra venga avviato direttamente da OpenOffice/LibreOfffice (similmente a quando faresti un collegamento sul desktop per avviare un file presente in un'altra posizione del tuo PC) allora “ThisComponent.GetUrl()” restituisce automaticamente il percorso del file che hai cliccato presente nel desktop del PC. Ma credo che tale operazione/collegamento non sia possibile verso il cloud.

Se ti riesce tale operazione allora si può elaborare la stringa restituita da “ThisComponent.GetUrl()” e raggiungere lo scopo che ti sei prefissato.

A tal riguardo puoi provare a testare il file scaricabile da questo link

Caricalo su OneDrive.
Se è possibile creati sul tuo desktop un collegamento per avviare la copia del file che hai caricato su OneDrive.
Clicca sul collegamento e se riesci ad avviare il file accettane l'esecuzione delle macro.
Quando il file risulterà aperto clicca sul pulsante arancione che avvia la macro che salva in pdf il preventivo di prova impostato.

Se sul desktop del PC ti ritrovi il file pdf creato dalla macro allora la cosa è fattibile.

In alternativa credo che la soluzione più pratica per raggiungere lo scopo che ti sei prefissato con il tuo file di esempio diventi quella di creare un menu a tendina da valorizzare con i vari percorsi possibili da utilizzarsi e di volta in volta l'operatore che userà il file debba selezionare quello che la macro dovrà acquisire da quella cella similmente al dato che acquisirà dalla cella T2 da concatenare ...
solari77
Messaggi: 18
Iscritto il: domenica 13 giugno 2021, 10:59

Re: Salva file con nome presente in una cella e percorso aut

Messaggio da solari77 »

Ciao lucky63, ho salvato il file "Test - Macro - PreventivoEbanis" su OneDrive, poi ho creato un collegamento sul desktop.
Viene creato un pdf all'interno di OneDrive .

Io non ci capisco nulla di programmazione
Per il nome del file concatenando il valore presente nella cella, dal file indicato provo a lavorarci per vedere se riesco.

Per il percorso pensavo che ricavando il percorso del file nel mio caso
C:\Users\mioPC\OneDrive\
si potesse estrarre la parte " C:\Users\mioPC\ "poi modificare la parte finale per salvare sempre sul Desktop, nel mio caso
C:\Users\mioPc\Dati applicazioni\Desktop\ quindi estrarre solo "\Dati applicazioni\Desktop\ "
Dico questo perchè in tutti i PC in cui verrà usato il file il percorso del Desktop sarà sempre lo stesso , nello specifico
parte comune C:\Users parte variabile \mioPc\ e ancora parte comune Dati applicazioni\Desktop\
OpenOffice 3.1 su Windows Vista
Avatar utente
lucky63
Volontario assiduo
Volontario assiduo
Messaggi: 2997
Iscritto il: martedì 18 maggio 2010, 17:01

Re: Salva file con nome presente in una cella e percorso aut

Messaggio da lucky63 »

.
Quindi il percorso di OneDrive lo vedi come una cartella del tuo PC.

Allego file con codice collegato a pulsante per test che dovrebbe visualizzarti il percorso ricostruito al tuo desktop come da te descritto.
Inizia con file://// e a seguire il percorso C:/ ..../ ..../NomeFile-CellaT2.pdf
(Sempre con barra rovescia)
.
Allegati
Test.ods
(10 KiB) Scaricato 101 volte
geovign
Messaggi: 217
Iscritto il: domenica 13 gennaio 2019, 11:19
Località: Modena

Re: Salva file con nome presente in una cella e percorso aut

Messaggio da geovign »

Usare la funzione Environ("USERPROFILE") ?

Codice: Seleziona tutto

 .....
Mese = Foglio.GetCellRangeByName("T2").String
NomeDelFile = "Presenze-" & Mese & ".pdf"
Cartella = ConvertToUrl(Environ("USERPROFILE") & "/DatiApplicazione/Desktop/")
Percorso = Cartella & NomeDelFile
.....
Saluti
Geo

EDIT: Questo dovrebbe essere il codice completo:

Codice: Seleziona tutto

Sub SalvaPDF
rem determino il nome del file ed il percorso di salvataggio
Dim Foglio As Object
Dim Mese As String
Dim NomeDelFoglio As String
Dim Cartella As Object
Dim Percorso As String
Foglio = ThisComponent.getSheets.getByName("Presenze") 'accedo al foglio attraverso il nome
Mese = Foglio.GetCellRangeByName("T2").String
NomeDelFile = "Presenze-" & Mese & ".pdf"
Cartella = ConvertToUrl(Environ("USERPROFILE") & "/DatiApplicazioni/Desktop/")
Percorso = Cartella & NomeDelFile
Print Percorso	'riga da cancellare se percorso corretto
rem accedo al documento
dim document   as Object
dim dispatcher as Object
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem esporto documento in formato pdf
dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "URL"
args1(0).Value = Percorso
args1(1).Name = "FilterName"
args1(1).Value = "calc_pdf_Export"
dispatcher.executeDispatch(document, ".uno:ExportDirectToPDF", "", 0, args1())
End Sub
LibO 7 su LinuxMint 21
solari77
Messaggi: 18
Iscritto il: domenica 13 giugno 2021, 10:59

Re: Salva file con nome presente in una cella e percorso aut

Messaggio da solari77 »

Ciao geovign,

su questa riga
Cartella = ConvertToUrl(Environ("USERPROFILE") & "/DatiApplicazioni/Desktop/")
mi da questo errore
Errore di runtime BASIC.
'91'
Variabile dell'oggetto non impostata
OpenOffice 3.1 su Windows Vista
geovign
Messaggi: 217
Iscritto il: domenica 13 gennaio 2019, 11:19
Località: Modena

Re: Salva file con nome presente in una cella e percorso aut

Messaggio da geovign »

Ciao solari77
Prima di provare la macro verifica la posizione della cartella Desktop da Esplora Risorse nella parte \DatiApplicazione\Desktop, in quanto se il percorso non è corretto, il codice crea le cartelle "errate" e ci salva dentro il file.

Codice: Seleziona tutto

Sub SalvaPDF
rem determino il nome del file ed il percorso di salvataggio
Dim Foglio As Object
Dim Mese As String
Dim NomeDelFoglio As String
Dim Cartella As String
Dim Percorso As String
Foglio = ThisComponent.getSheets.getByName("Presenze") 'accedo al foglio attraverso il nome
Mese = Foglio.GetCellRangeByName("T2").String
NomeDelFile = "Presenze-" & Mese & ".pdf"
Cartella = ConvertToUrl(Environ("USERPROFILE") & "\DatiApplicazioni\Desktop\") 'da controllare la corretta posizione della cartella Desktop
Percorso = Cartella & NomeDelFile
Print Percorso   'riga da cancellare se percorso corretto
rem accedo al documento
dim document   as Object
dim dispatcher as Object
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem esporto documento in formato pdf
dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "URL"
args1(0).Value = Percorso
args1(1).Name = "FilterName"
args1(1).Value = "calc_pdf_Export"
dispatcher.executeDispatch(document, ".uno:ExportDirectToPDF", "", 0, args1())
End Sub
Saluti
Geo
LibO 7 su LinuxMint 21
solari77
Messaggi: 18
Iscritto il: domenica 13 giugno 2021, 10:59

Re: Salva file con nome presente in una cella e percorso aut

Messaggio da solari77 »

Ho messo l'ultimo codice che mi hai inviato.
Ora sto utilizzando il file su un PC il cui percorso su OneDrive è :
C:\Users\uldem\OneDrive
Il percorso del Desktop è:
C:\Users\uldem\Dati applicazioni\Desktop

Con l'istruzione che hai inserito " Print Percorso" mi da questo percorso e non salva nessun file
file:///C:/Users/uldem/DatiApplicazioni/Desktop/Presenze-gennaio.pdf

L'errore sono per caso i 3 /// presenti prima di C ?

In attesa ringrazio
OpenOffice 3.1 su Windows Vista
geovign
Messaggi: 217
Iscritto il: domenica 13 gennaio 2019, 11:19
Località: Modena

Re: Salva file con nome presente in una cella e percorso aut

Messaggio da geovign »

Sostituisci l'intera riga
Cartella = ConvertToUrl(Environ("USERPROFILE") & "\DatiApplicazioni\Desktop\")
con
Cartella = ConvertToUrl(Environ("USERPROFILE") & "\Dati applicazioni\Desktop\")
E' che la posizione della cartella Desktop indicata nella macro era errata .
solari77 ha scritto:Con l'istruzione che hai inserito " Print Percorso" mi da questo percorso e non salva nessun file
Controlla che sicuramente troverai in C:\Users\uldem\DatiApplicazioni\Desktop il tuo file Presenze-gennaio.pdf
Attenzione agli spazi, C:\Users\uldem\DatiApplicazioni\Desktop è diverso da C:\Users\uldem\Dati applicazioni\Desktop, quindi in C:\Users\uldem\ ti troverai due cartelle una "DatiApplicazioni" e l'altra "Dati applicazioni".
Spero di essere stato chiaro.
Saluti.
Geo
LibO 7 su LinuxMint 21
solari77
Messaggi: 18
Iscritto il: domenica 13 giugno 2021, 10:59

Re: Salva file con nome presente in una cella e percorso aut

Messaggio da solari77 »

Perfetto ora funziona.
Grazie mille per l'aiuto
OpenOffice 3.1 su Windows Vista
amax
Messaggi: 99
Iscritto il: mercoledì 7 novembre 2012, 10:59

Re: [Risolto]Salva file con nome in una cella e percorso automat

Messaggio da amax »

scusate se riesumo questo post, a me va bene, l'unica cosa che vorrei cambiare è il nome del foglio. Ho già una macro che mi duplica il foglio e lo rinomina, prendendo il nome da una cella, adesso vorrei cambiare questa riga

Codice: Seleziona tutto

Foglio = ThisComponent.getSheets.getByName("Presenze") 'accedo al foglio attraverso il nome
con una che invece di accedere al foglio attraverso il nome "Presenze", accedesse attraverso il nome recuperato dalla cella L1, ho fatto una serie di prove con le mie conoscenze, ma mi salva tutti i fogli, io vorrei che salvasse solo quello specifico

Grazie mille
macOS 14 Sonoma: LibreOffice 24.2.1
Rispondi