Macro per salvare file con nome preveniente da celle

Creare una macro - Scrivere uno script - Usare le API
faber_x
Messaggi: 17
Iscritto il: domenica 6 settembre 2020, 12:03

Macro per salvare file con nome preveniente da celle

Messaggio da faber_x »

Buongiorno a tutti, sono nuovo e .....
premetto che ho scoperto l'esistenza delle macro stanotte :D perchè non riuscendo a dormire mi sono messo a cercare soluzioni ad un piccolo problema che vorrei risolvere e, pare, che sia fattibile con l'utilizzo, appunto, delle macro. Utilizzo Libreoffice Versione: 6.4.6.2 (x64) e win10
Passo alla questione:
Ho un foglio di calcolo che utilizzo per fare dei conti e mi piacerebbe, una volta completato il conto, avere un tasto in CALC da premere per fare in modo che il documento venga salvato nel formato originale .ods con nome composito preso da celle all'interno del foglio di calcolo. Oltre a questo (già, non è finita qui) vorrei un altro tasto che mi azzeri determinate celle del documento in modo da ripartire con il conto successivo da zero. Spero di essermi spiegato, in caso Vi chiedo di porre tutte le domande del caso.
Spero in un vostro aiuto, io ahimé non sono un programmatore e non ho nozioni di programmazione di nessun tipo.
Allego il file in modo, spero, di chiarirvi le idee.
Le celle dale quali vorrei formare il nome del file da salvare sono:
K6 (data)
C7 (nome cliente)
C9 (numero di camera)

esemplificando: Nome Mario Rossi, camera 328, Data 2020-09-06
il file risultante dovrebbe in automatico essere: 2020-09-06 Mario Rossi 328.ods

Ringrazio infinitamente a chi potrà aiutarmi. Non chiedo la "pappa scodellata" anche se ovviamente la accetto a braccia aperte. Mi diverto a smanettare quindi posso anche procedere per gradi seguendo le Vs., spero tante, indicazioni.

Grazie mille
Fabrizio
Allegati
CONTO_prova.ods
(16.28 KiB) Scaricato 224 volte
libreoffice Versione: 6.4.6.2 (x64) su windows 10
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8786
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Macro per salvare file con nome preveniente da celle

Messaggio da charlie »

Ciao e benvenuto/a sul forum.
Se intanto ti vuoi presentare, farai cosa gradita. Puoi farlo in questa sezione -> viewforum.php?f=16

L’utente che apre un quesito si impegna: In caso di inosservanza saremo costretti ad azioni di “richiamo”, sospensione o chiusura del profilo utente.

Buon proseguimento.
charlie
macOS 14.3 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
patel
Volontario attivo
Volontario attivo
Messaggi: 4019
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Macro per salvare file con nome preveniente da celle

Messaggio da patel »

prova questa

Codice: Seleziona tutto

Sub Salva_con_nome
Dim  args()
Doc = Thiscomponent
Sheet = Doc.Sheets(0)
   prefix = "file:///"
   Nome = Sheet.getCellRangeByName("C7").string
   data = Sheet.getCellRangeByName("K6").string
   camera = Sheet.getCellRangeByName("C9").string
   Filename = data & Nome & camera & ".ods"
'   print Filename
   Filename =  prefix & Filename
   if FileExists(Filename ) then 
     print "File già esistente"
     exit sub
   end if
   Doc.storeToURL(Filename, args())
'   Doc.close(true)

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
faber_x
Messaggi: 17
Iscritto il: domenica 6 settembre 2020, 12:03

Re: Macro per salvare file con nome preveniente da celle

Messaggio da faber_x »

Ciao patel
grazie della risposta! Ho provato e temo di non essere in grado di farlo funzionare. Riallego il file con la macro inserita. Al di là che non riesco a farlo funzionare ti chiedo: dove indico la cartella che voglio sia destinataria dei salvataggi? per semplificare ti dico che è c:/conti ... e le barre? ho letto che su libreoffice openoffice ci vogliono quelle inverse ( \ ) o no?
Allegati
CONTO_prova.ods
(15.97 KiB) Scaricato 182 volte
libreoffice Versione: 6.4.6.2 (x64) su windows 10
faber_x
Messaggi: 17
Iscritto il: domenica 6 settembre 2020, 12:03

Re: Macro per salvare file con nome preveniente da celle

Messaggio da faber_x »

cercando e smanettando ho trovato questo:

Codice: Seleziona tutto

Sub Salva_con_nome
Dim Nome As String, Filename As String, Doc As Object, Sheet As Object, args()
Doc = Thiscomponent
Sheet = Doc.Sheets(0)
Nome = "file:///C:/Conti/"
K6 = Sheet.getCellRangeByName("K6").string
C7 = Sheet.getCellRangeByName("C7").string
C9 = Sheet.getCellRangeByName("C9").string
Filename = Nome & K6 & C7 & C9 & ".ods"
' print Filename
Doc.storeToURL(Filename, args())
End Sub
(che è sempre opera di patel) e sono riuscito ad adattarlo e farlo funzionare.
Quindi innanzitutto ringrazio perchè ho fatto un passo avanti importantissimo.
Ora ... gli aggiustamenti "fini":

1
vorrei mettere uno spazio o un underscore tra i "componenti" che compongono il nome del file
2020-09-09rossi mario328 (come attualmente viene salvato il file)
vorrei fosse
2020-09-09_rossi mario_328
o
2020-09-09 rossi mario 328

2
dopo che la macro ha eseguito il salvataggio con nome vorrei che lanciasse in automatico la stampa

3
dopo che la macro ha eseguito il salvataggio con nome e ha lanciato la stampa vorrei che alcune celle (a mia scelta) vengano riportate ai valori di partenza

4
dopo tutto sto trambusto, in fine, vorrei mettere un tasto sul foglio excel da premere per far partire la macro :D

ok, adesso insultatemi pure :crazy: :crazy: :crazy: :crazy:

p.s.: allego il file con macro funzionante
Allegati
CONTO_prova.ods
(17.57 KiB) Scaricato 202 volte
libreoffice Versione: 6.4.6.2 (x64) su windows 10
patel
Volontario attivo
Volontario attivo
Messaggi: 4019
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Macro per salvare file con nome preveniente da celle

Messaggio da patel »

almeno per la prima domanda potresti risolvere da solo documentandoti un poco
-------------------
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
faber_x
Messaggi: 17
Iscritto il: domenica 6 settembre 2020, 12:03

Re: Macro per salvare file con nome preveniente da celle

Messaggio da faber_x »

Hai ragionissima. In effetti mi ero messo a studiare. Non gli spazi vuoti ma sull'inserire un pulsante per fare partire la macro e sui codici per lanciare la stampa. Sono riuscito a fare il pulsante che avvia la macro. Sulla stampa mi sono arenato. Ho provato con il "registra attività" ma non funziona. Più tardi, in nottata posterò dando info più dettagliate. Gli spazi se ho capito bene dovrebbero essere " " ... Giusto? Dopo appena finisco di lavorare ci provo. Intanto grazie per il supporto
libreoffice Versione: 6.4.6.2 (x64) su windows 10
patel
Volontario attivo
Volontario attivo
Messaggi: 4019
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Macro per salvare file con nome preveniente da celle

Messaggio da patel »

Gli spazi sono " ", ma meglio evitarli sui nomi, meglio usare "_"
-------------------
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
faber_x
Messaggi: 17
Iscritto il: domenica 6 settembre 2020, 12:03

Re: Macro per salvare file con nome preveniente da celle

Messaggio da faber_x »

Thx. Tra poco mi metto al lavoro
libreoffice Versione: 6.4.6.2 (x64) su windows 10
faber_x
Messaggi: 17
Iscritto il: domenica 6 settembre 2020, 12:03

Re: Macro per salvare file con nome preveniente da celle

Messaggio da faber_x »

... e niente, sulla stampa non trovo niente che funzioni (o meglio, che funzioni per me)
Risolto il problema degli spazi inserendo underscore e pulsante realizzato e funzionante.
rimane da risolvere la stampa e la cancellazione di valori da celle predefinite

comunque è già un risultato notevole per me
se avete qualche suggerimento per la stampa non esitate, adesso mi metto alla ricerca di un codice funzionante
libreoffice Versione: 6.4.6.2 (x64) su windows 10
faber_x
Messaggi: 17
Iscritto il: domenica 6 settembre 2020, 12:03

Re: Macro per salvare file con nome preveniente da celle

Messaggio da faber_x »

Codice: Seleziona tutto

Sub Salva_con_nome
Dim Nome As String, Filename As String, Doc As Object, Sheet As Object, args()
Doc = Thiscomponent
Sheet = Doc.Sheets(0)
Nome = "file:///>>>>PERCORSO<<<</"
K6 = Sheet.getCellRangeByName("K6").string
C7 = Sheet.getCellRangeByName("C7").string
C9 = Sheet.getCellRangeByName("C9").string
Filename = Nome & K6 & "_" & C7  & "_" & C9 & ".ods"
' print Filename
Doc.storeToURL(Filename, args())
End Sub

Sub Stampa_Foglio()
ActiveSheet.PrintOut
End Sub 


eppure il codice sembra semplice e leggo che funziona a molti

a me da l'errore come da immagine "errore di runtime basic. variabile dell'oggetto non impostata (indicando la riga ActiveSheet.PrintOut)
Allegati
Clipboard01.jpg
Ultima modifica di faber_x il mercoledì 9 settembre 2020, 10:06, modificato 1 volta in totale.
libreoffice Versione: 6.4.6.2 (x64) su windows 10
patel
Volontario attivo
Volontario attivo
Messaggi: 4019
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Macro per salvare file con nome preveniente da celle

Messaggio da patel »

ActiveSheet non significa niente in starbasic, come hai già visto devi scrivere

Codice: Seleziona tutto

 
Sub Stampa_Foglio()
Doc = Thiscomponent
Sheet = Doc.Sheets(0)
Sheet.PrintOut
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
faber_x
Messaggi: 17
Iscritto il: domenica 6 settembre 2020, 12:03

Re: Macro per salvare file con nome preveniente da celle

Messaggio da faber_x »

Ho visto sì, che non funzionava! Ignoro totalmente la programmazione quindi posso solo constatare se una cosa funziona o no. Ed in effetti activesheet non funzionava. Oggi provo il tuo suggerimento (e non dubito che funzionerà).
libreoffice Versione: 6.4.6.2 (x64) su windows 10
faber_x
Messaggi: 17
Iscritto il: domenica 6 settembre 2020, 12:03

Re: Macro per salvare file con nome preveniente da celle

Messaggio da faber_x »

:alarm:
Allegati
Appunti01.jpg
libreoffice Versione: 6.4.6.2 (x64) su windows 10
faber_x
Messaggi: 17
Iscritto il: domenica 6 settembre 2020, 12:03

Re: Macro per salvare file con nome preveniente da celle

Messaggio da faber_x »

ok, al di là di tutto faccio il punto della situazione e pongo domande tecniche-
Al momento la situazione è discreta ma non idilliaca. Ho trovato questo codice:

Codice: Seleziona tutto

Sub PrintDoc

Dim Document As object

Dim Dispatcher As Object

Document = ThisComponent.CurrentController.Frame

Dispatcher = createUNOService("com.sun.star.frame.DispatchHelper")

Dispatcher.executeDispatch(Document,".uno:Print", "", 0, Array())

End sub
che potrebbe anche andarmi bene però mi apre la finestra di dialogo stampa mentre vorrei stampare direttamente.

I salvataggi funzionano bene, ho riprovato anche il primo codice inviato da patel e, come era ipotizzabile, funziona alla grande, ero io che da niubbo erravo alcune cose.
libreoffice Versione: 6.4.6.2 (x64) su windows 10
faber_x
Messaggi: 17
Iscritto il: domenica 6 settembre 2020, 12:03

Re: Macro per salvare file con nome preveniente da celle

Messaggio da faber_x »

ci sono riuscito, funziona tutto. dopo riprovo per bene e magari posto il codice (che per voi sarà una cosa ridicola) che magari a qualche scarsone come me potrebbe fare comodo. grazie
libreoffice Versione: 6.4.6.2 (x64) su windows 10
patel
Volontario attivo
Volontario attivo
Messaggi: 4019
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Macro per salvare file con nome preveniente da celle

Messaggio da patel »

Che soddisfazione riuscire a fare da solo !
In effetti il codice che avevi trovato prima per la stampa era per excel.
-------------------
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
faber_x
Messaggi: 17
Iscritto il: domenica 6 settembre 2020, 12:03

Re: Macro per salvare file con nome preveniente da celle

Messaggio da faber_x »

Si grande soddisfazione lo ammetto. PArtendo da zero è un risultato apprezzabile.
Ho dovuto fare due macro ed associarle a due pulsanti separati perche se mettevo tutte le "funzioni" dentro ad un unica macro il salvataggio avveniva a conto già azzerato. Ho pèrovato anche a invertire la sequenza mettendo il salvataggio come prima "funzione" seguita dalla stampa e in ultimo l'azzeramento ma ancora ottenevo file salvati già azzerati. Quindi due pulsanti e via.
Ringrazio patel per il supporto FONDAMENTALE
Questa la macro che salva il file con nome creando il nome da tre celle

Codice: Seleziona tutto

Sub salva_stampa()
Dim Nome As String, Filename As String, Doc As Object, Sheet As Object, args()
Doc = Thiscomponent
Sheet = Doc.Sheets(0)
Nome = "file:///C:/>>>>PERCORSO<<<</"
K6 = Sheet.getCellRangeByName("K6").string
C7 = Sheet.getCellRangeByName("C7").string
C9 = Sheet.getCellRangeByName("C9").string
Filename = Nome & K6 & "_" & C7  & "_" & C9 & ".ods"
' print Filename
Doc.storeToURL(Filename, args())

Document = ThisComponent.CurrentController.Frame

Dispatcher = createUNOService("com.sun.star.frame.DispatchHelper")

Dispatcher.executeDispatch(Document,".uno:Print", "", 0, Array())

End Sub
e questa quella che azzzera le celle e salva il doc originale (azzerato) una volta azzerate le celle. Questa l'ho creata con il mitico "registra macro"

Codice: Seleziona tutto

Sub azzera_celle

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(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$C$7"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:ClearContents", "", 0, Array())

rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = "$C$9"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:ClearContents", "", 0, Array())

rem ----------------------------------------------------------------------
dim args5(0) as new com.sun.star.beans.PropertyValue
args5(0).Name = "ToPoint"
args5(0).Value = "$F$9"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args5())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:ClearContents", "", 0, Array())

rem ----------------------------------------------------------------------
dim args7(0) as new com.sun.star.beans.PropertyValue
args7(0).Name = "ToPoint"
args7(0).Value = "$H$9"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args7())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:ClearContents", "", 0, Array())

rem ----------------------------------------------------------------------
dim args9(0) as new com.sun.star.beans.PropertyValue
args9(0).Name = "ToPoint"
args9(0).Value = "$B$12:$D$17"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args9())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:ClearContents", "", 0, Array())

rem ----------------------------------------------------------------------
dim args11(0) as new com.sun.star.beans.PropertyValue
args11(0).Name = "ToPoint"
args11(0).Value = "$F$12:$G$17"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args11())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:ClearContents", "", 0, Array())

rem ----------------------------------------------------------------------
dim args13(0) as new com.sun.star.beans.PropertyValue
args13(0).Name = "ToPoint"
args13(0).Value = "$B$21:$D$22"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args13())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:ClearContents", "", 0, Array())

rem ----------------------------------------------------------------------
dim args15(0) as new com.sun.star.beans.PropertyValue
args15(0).Name = "ToPoint"
args15(0).Value = "$F$21:$G$22"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args15())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:ClearContents", "", 0, Array())

rem ----------------------------------------------------------------------
dim args17(0) as new com.sun.star.beans.PropertyValue
args17(0).Name = "ToPoint"
args17(0).Value = "$B$31:$D$37"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args17())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:ClearContents", "", 0, Array())

rem ----------------------------------------------------------------------
dim args19(0) as new com.sun.star.beans.PropertyValue
args19(0).Name = "ToPoint"
args19(0).Value = "$F$31:$G$37"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args19())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:ClearContents", "", 0, Array())

rem ----------------------------------------------------------------------
dim args21(0) as new com.sun.star.beans.PropertyValue
args21(0).Name = "ToPoint"
args21(0).Value = "$B$26:$D$27"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args21())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:ClearContents", "", 0, Array())

rem ----------------------------------------------------------------------
dim args23(0) as new com.sun.star.beans.PropertyValue
args23(0).Name = "ToPoint"
args23(0).Value = "$F$26:$G$27"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args23())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:ClearContents", "", 0, Array())

rem ----------------------------------------------------------------------
dim args25(0) as new com.sun.star.beans.PropertyValue
args25(0).Name = "ToPoint"
args25(0).Value = "$J$41"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args25())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:ClearContents", "", 0, Array())

rem ----------------------------------------------------------------------
dim args27(0) as new com.sun.star.beans.PropertyValue
args27(0).Name = "ToPoint"
args27(0).Value = "$E$45"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args27())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:ClearContents", "", 0, Array())

rem ----------------------------------------------------------------------
dim args29(0) as new com.sun.star.beans.PropertyValue
args29(0).Name = "ToPoint"
args29(0).Value = "$G$45"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args29())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:ClearContents", "", 0, Array())

rem ----------------------------------------------------------------------
dim args31(0) as new com.sun.star.beans.PropertyValue
args31(0).Name = "ToPoint"
args31(0).Value = "$E$45"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args31())

rem ----------------------------------------------------------------------
dim args32(0) as new com.sun.star.beans.PropertyValue
args32(0).Name = "StringName"
args32(0).Value = "0"

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args32())

rem ----------------------------------------------------------------------
dim args33(0) as new com.sun.star.beans.PropertyValue
args33(0).Name = "ToPoint"
args33(0).Value = "$G$45"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args33())

rem ----------------------------------------------------------------------
dim args34(0) as new com.sun.star.beans.PropertyValue
args34(0).Name = "StringName"
args34(0).Value = "0"

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args34())

rem ----------------------------------------------------------------------
dim args35(0) as new com.sun.star.beans.PropertyValue
args35(0).Name = "ToPoint"
args35(0).Value = "$F$46"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args35())

rem ----------------------------------------------------------------------
rem define variables

rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Save", "", 0, Array())

End Sub
libreoffice Versione: 6.4.6.2 (x64) su windows 10
faber_x
Messaggi: 17
Iscritto il: domenica 6 settembre 2020, 12:03

Re: Macro per salvare file con nome preveniente da celle

Messaggio da faber_x »

L'unica cosa è che vorrei la stampa partisse subito anziché passare dalla finestra di stampa e dover premere "stampa" per stampare
libreoffice Versione: 6.4.6.2 (x64) su windows 10
geovign
Messaggi: 215
Iscritto il: domenica 13 gennaio 2019, 11:19
Località: Modena

Re: Macro per salvare file con nome preveniente da celle

Messaggio da geovign »

Ti posto il link della pagina web con diversi comandi .uno (tipo ".uno:Print" , usato nel tuo codice) per LibreOffice : https://wiki.documentfoundation.org/Dev ... chCommands
Eseguendo una ricerca nella pagina con "Print" sicuramente troverai il comando che serve per stampare direttamente con la stampante di default.
Trovato il comando, lo dovrai inserire nella riga
Dispatcher.executeDispatch(Document,".uno:Print", "", 0, Array())
al posto di ".uno:Print"
Buon lavoro.
Saluti
Geo
LibO 7 su LinuxMint 21
faber_x
Messaggi: 17
Iscritto il: domenica 6 settembre 2020, 12:03

Re: Macro per salvare file con nome preveniente da celle

Messaggio da faber_x »

Grazie mille, appena posso provo i vari codici!
libreoffice Versione: 6.4.6.2 (x64) su windows 10
faber_x
Messaggi: 17
Iscritto il: domenica 6 settembre 2020, 12:03

Re: Macro per salvare file con nome preveniente da celle

Messaggio da faber_x »

.uno:PrintDefault

eccolo!!!! grazie mille

mi si è aperto un mondo con 'ste macro. molto divertente!
libreoffice Versione: 6.4.6.2 (x64) su windows 10
amax
Messaggi: 99
Iscritto il: mercoledì 7 novembre 2012, 10:59

Re: Macro per salvare file con nome preveniente da celle

Messaggio da amax »

Scusate, perchè a me restituisce quest'errore?
Schermata 2020-10-30 alle 16.03.34.png
macOS 14 Sonoma: LibreOffice 24.2.1
amax
Messaggi: 99
Iscritto il: mercoledì 7 novembre 2012, 10:59

Re: Macro per salvare file con nome preveniente da celle

Messaggio da amax »

e mi evidenzia questo

Codice: Seleziona tutto

ThisComponent.storeToURL(fname, mStoreOpts())
macOS 14 Sonoma: LibreOffice 24.2.1
patel
Volontario attivo
Volontario attivo
Messaggi: 4019
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Macro per salvare file con nome preveniente da celle

Messaggio da patel »

Come risponderti senza vedere tutto il codice che hai scritto ? anche se l'hai copiato potresti avere fatto qualche errore.
-------------------
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
amax
Messaggi: 99
Iscritto il: mercoledì 7 novembre 2012, 10:59

Re: Macro per salvare file con nome preveniente da celle

Messaggio da amax »

Hai ragione, ma avendolo copiato pensavo bastasse, allego il file con le modifiche

Grazie
Allegati
Salva con nome da celle.ods
(9.43 KiB) Scaricato 91 volte
macOS 14 Sonoma: LibreOffice 24.2.1
Avatar utente
lucky63
Volontario assiduo
Volontario assiduo
Messaggi: 2992
Iscritto il: martedì 18 maggio 2010, 17:01

Re: Macro per salvare file con nome preveniente da celle

Messaggio da lucky63 »

.
Molto probabilmente hai sbagliato l'impostazione del percorso di salvataggio.

Così forse ti è più chiaro e funziona ma non ho modo di testarlo su windows.
Adegua la riga che inizia con "PercorsoDiSalvataggio" al tuo sistema operativo, ...

Codice: Seleziona tutto

Sub SalvaConNomeCelle
Dim PercorsoDiSalvataggio As String, NomeDelFile As String, Documento As Object, Foglio As Object, args()
Documento = Thiscomponent
Foglio = Documento.Sheets(0) ' il primo foglio
PercorsoDiSalvataggio = "file:///home/NomeUtente/Scrivania/"  'percorso Linux
'PercorsoDiSalvataggio = "file:///C:/NomeDelPercorso/"  'percorso windows (sempre barre rovescie)
A1 = Foglio.getCellRangeByName("A1").string
B1 = Foglio.getCellRangeByName("B1").string
C1 = Foglio.getCellRangeByName("C1").string
NomeDelFile = PercorsoDiSalvataggio & A1 & "_" & B1  & "_" & C1 & ".ods"
Rem Test di verifica ( del Percorso e nome file completo)
 print NomeDelFile   'visualizza a schermo il percorso completo (commentare poi con apostrofo o Rem)
 STOP  'Blocca l'esecuzione (commentare poi con apostrofo o Rem)
Documento.storeToURL(NomeDelFile, args())
End Sub
Allegati
Salva con nome da celle 01.ods
(10.25 KiB) Scaricato 101 volte
amax
Messaggi: 99
Iscritto il: mercoledì 7 novembre 2012, 10:59

Re: Macro per salvare file con nome preveniente da celle

Messaggio da amax »

grazie, adesso non mi restituisce più l'errore di prima, ma comunque non funziona.
Uso un Mac ed il percorso è quello che uso anche per altre macro

Codice: Seleziona tutto

/Users/Max/Documents/Test/
mi compare questo Avviso
Schermata 2020-11-02 alle 22.48.42.png
e se clicco su OK non salva nulla

Non capisco
macOS 14 Sonoma: LibreOffice 24.2.1
Avatar utente
lucky63
Volontario assiduo
Volontario assiduo
Messaggi: 2992
Iscritto il: martedì 18 maggio 2010, 17:01

Re: Macro per salvare file con nome preveniente da celle

Messaggio da lucky63 »

lucky63 ha scritto: ...
Se leggevi le poche righe di codice erano ben commentate.
La finestrella ti appare perchè:

Codice: Seleziona tutto

Rem Test di verifica ( del Percorso e nome file completo)
print NomeDelFile   'visualizza a schermo il percorso completo (commentare poi con apostrofo o Rem)
Serviva solo per una prima verifica di riscontro dell'indirizzo completo del file durante il test.
Come è indicato per evitare che appaia è sufficiente far iniziare la riga con un apostrofo o un REM (per trasformarla in un commento e quindi non operativa).
Similmente per la riga successiva che blocca l'esecuzione della macro

Codice: Seleziona tutto

STOP  'Blocca l'esecuzione (commentare poi con apostrofo o Rem)
Il percorso di salvataggio su "mac" credo tu debba inserirlo tipo questo:

Codice: Seleziona tutto

"file:///Users/Max/Documents/Test/"
Ti allego il codice ripulito dal superfluo e già adattato nel tuo percorso di salvataggio "mac" per come credo tu debba scriverlo:

Codice: Seleziona tutto

Sub SalvaConNomeCelle
Dim PercorsoDiSalvataggio As String, NomeDelFile As String, Documento As Object, Foglio As Object, args()
Documento = Thiscomponent
Foglio = Documento.Sheets(0) ' il primo foglio
'PercorsoDiSalvataggio = "file:///home/NomeUtente/Scrivania/"  ' Esempio di percorso su Linux
'PercorsoDiSalvataggio = "file:///C:/NomeDelPercorso/"  'Esempio di percorso su windows (sempre barre rovescie)
PercorsoDiSalvataggio = "file:///Users/Max/Documents/Test/"  ' Esempio di percorso su Mac  (sempre barre rovescie)
A1 = Foglio.getCellRangeByName("A1").string
B1 = Foglio.getCellRangeByName("B1").string
C1 = Foglio.getCellRangeByName("C1").string
NomeDelFile = PercorsoDiSalvataggio & A1 & "_" & B1  & "_" & C1 & ".ods"
Documento.storeToURL(NomeDelFile, args())
End Sub
amax
Messaggi: 99
Iscritto il: mercoledì 7 novembre 2012, 10:59

Re: Macro per salvare file con nome preveniente da celle

Messaggio da amax »

Scusate, lucky63 hai perfettamente ragione, nel cercare di capire il codice non ho dato peso ai commenti, per quanto riguarda il percorso non ho capito perchè non funzionava 8l'ho copiato ed incollato ed adesso funziona).

Adesso mi vergogno un po' a formulare una nuova domanda, ma per completare l'opera (della macro o per stabilire definitavemte che sono "tugno"), con questa macro si salva una copia del file con nome, lasciando aperto il file, se nuovo, "Senza Titolo 1".

Per salvare il file e lasciare aperto il file salvato?
macOS 14 Sonoma: LibreOffice 24.2.1
Rispondi