[Risolto] Nome computer variabile

Discussioni sull'applicazione per i fogli di calcolo
Rispondi
Ant52
Messaggi: 176
Iscritto il: sabato 18 agosto 2018, 15:38

[Risolto] Nome computer variabile

Messaggio da Ant52 »

Buonasera,
ho alcuni files di calc che contengono macro per copiare dati da un file ad un altro e fare altri lavori. Ovviamente quando devo fare riferimento ad un file esterno inserisco il percorso (indirizzo) del file stesso. Se però questo file viene utilizzato su un pc diverso dal mio, che ha naturalmente un altro nome, è ovvio che i riferimenti devono essere modificati perchè tutto funzioni. Quindi chiedo: esiste la possibilità di indicare nelle macro un percorso file valido per tutti i pc?
Mi spiego meglio invece di scrivere: sFileName ="C:\Users\Lenovo\Desktop\Nome File.ods" si potrebbe scrivere: sFileName="C:\Users\COMPUTERNAME\Desktop\Nome File.ods"
ovviamente dopo avere definito COMPUTERNAME=nome di questo pc (non ricordo bene se c'entra l'istruzione "Environ").
Sarebbe una bella comodità perchè in questo modo lo stesso file potrebbe essere utilizzato da pc diversi.
Grazie mille e buona serata a tutti.
Ultima modifica di Ant52 il martedì 7 settembre 2021, 8:37, modificato 1 volta in totale.
OpenOffice 4.1.5 Windows 10
Avatar utente
lucky63
Volontario assiduo
Volontario assiduo
Messaggi: 2996
Iscritto il: martedì 18 maggio 2010, 17:01

Re: Nome computer variabile

Messaggio da lucky63 »

Prova a usare:

Codice: Seleziona tutto

ThisComponent.getURL()
Acquisisci automaticamente URL del file
Ant52
Messaggi: 176
Iscritto il: sabato 18 agosto 2018, 15:38

Re: Nome computer variabile

Messaggio da Ant52 »

Grazie per il suggerimento, però non ho capito se devo inserirlo al posto del "Nome Computer", se devo inserirlo come definizione all'inizio della macro o altro. In pratica questa è una delle macro che vorrei modificare:

Sub CopiaRange
Dim DocName as object, DocUlr as string, dummy(), range as object
Doc = ThisComponent
Sheet = Doc.Sheets(0)
Range1 = Sheet.getCellRangeByName("B6:B27").getDataArray ' range da copiare
Range2 = Sheet.getCellRangeByName("D6:D27").getDataArray ' range da copiare
Dim Args(0) As New com.sun.star.beans.PropertyValue
Args(0).Name = "MacroExecutionMode"
Args(0).Value = com.sun.star.document.MacroExecMode.ALWAYS_EXECUTE_NO_WARN
sFileName = "C:\Users\Lenovo\Desktop\NomeFile.ods" ' file destinazione
DocUrl = ConvertToURL(sFileName)
DocName = StarDesktop.loadComponentFromURL (DocUrl, "_blank",0, Args() )
NomeFile = DocName.Sheets(2)

dRange1 = NomeFile.getCellRangeByName("B6:B27") ' range destinazione
dRange1.setDataArray(Range1)
dRange2 = NomeFile.getCellRangeByName("D6:D27") ' range destinazione
dRange2.setDataArray(Range2)
DocName.store()
Doc.Close(true)

End Sub

Chiedo scusa per l'ignoranza, ma non riesco a capire come fare questa modifica.
OpenOffice 4.1.5 Windows 10
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Nome computer variabile

Messaggio da patel »

hai provato il suggerimento di lucky ? ti da il percorso del file, da questo puoi estrarre il nome del pc ed utilizzarlo per i tuoi scopi
-------------------
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
Ant52
Messaggi: 176
Iscritto il: sabato 18 agosto 2018, 15:38

Re: Nome computer variabile

Messaggio da Ant52 »

Ho provato ad inserire questa riga nella macro ma, non sapendo come funziona, evidentemente non l'ho inserita nel posto corretto. Ho anche pensato che forse bisognerebbe fare una subroutine che rilevi il nome del pc e poi utilizzare il dato trovato ma per me, che ho competenze limitate, non è facile. Avrei bisogno di qualche altro suggerimento..... Grazie a tutti.
OpenOffice 4.1.5 Windows 10
Avatar utente
lucky63
Volontario assiduo
Volontario assiduo
Messaggi: 2996
Iscritto il: martedì 18 maggio 2010, 17:01

Re: Nome computer variabile

Messaggio da lucky63 »

.
Vedi esempio e relative info da cui trarre spunto per le modifiche che vorrai apportare.

Codice: Seleziona tutto

Sub NomeUtente
Rem Link di riferiment: https://forum.openoffice.org/it/forum/viewtopic.php?f=9&t=11339&sid=71cea26510759c05e019145474ac4950
Doc = ThisComponent
Url = Doc.GetUrl()
'MsgBox( Url ,0,"URL del file nel computer in uso")
REM ===========================================================
' Url Window sarà del tipo: file:///C:/Users/NomeUtente/.../...
' Url Linux  sarà del tipo: file:///home/NomeUtente/.../...
' Url Mac    sarà del tipo: file:///Users/NomeUtente/  
REM ===========================================================
' ThisComponent.GetUrl() restituisce URL del file della macro già in formato barra rovescia
' anche in Windows e così non sarà necessaria la conversione da \ a /.
' SE FORNISCI indicazioni che il file della macro e il file esterno devono trovarsi stessa cartella
' la cartella potrà essere utilizzata in qualsiasi posizione di qualsiasi computer
' volendo anche da Pendrive/DiscoPortatile e ciò sarebbe molto utile e pratico.
REM ===========================================================
' In questo caso potresti ricavarti inizialmente "URL SENZA il NOME FILE" del file della macro
For X = Len(Url) To 1 Step -1
 If InStr(X , Url , "/") <> 0 Then
 PosizioneUltimaBarra = X
 X = 1
 End If
Next
UrlSenzaNomeFile = Left(url , PosizioneUltimaBarra)
'MsgBox (UrlSenzaNomeFile , 0 , "URL senza il nome del file")
' --- trasformando le due righe del tuo esempio da così:
' sFileName = "C:\Users\Lenovo\Desktop\NomeFile.ods" ' file destinazione
' DocUrl = ConvertToURL(sFileName)
' --- a così:
' DocUrl = UrlSenzaNomeFile & "\NomeFile.ods" ' o simili
REM ===========================================================
' nel caso invece volessi ricavarti automaticamente solo il "NomeUtente" indipendentemente dal sistema operativo
' considera  che in tutti e tre i S.O. la "/" prima del "NomeUtente" la trovi normalmente dopo il 12 carattere dell'url
' ATTENZIONE: Casistica NON sempre vefificabile per Url esterni al "NomeUtente" (PenDrive/DischiEsterni, ...) su Windows/Mac.
' Trovo la posizione iniziale esatta  della "/" prima del "NomeUtente"
InizioNomeUtente = InStr(12 , Url , "/")
NomeUtentePiuPercorso = Right(Url , Len(Url)-InizioNomeUtente)
FineNomeUtente = InStr(NomeUtentePiuPercorso , "/")-1

Utente = Left(NomeUtentePiuPercorso , FineNomeUtente) 

MsgBox(Url & chr$(13) & chr$(13) & _
       "URL senza nome del file:     " & UrlSenzaNomeFile  & chr$(13) & chr$(13) & _
       "Nome Utente:     " & Utente , 0 ,"URL - URL senza nome file - Nome utente")


End Sub
Allegati
Test - Macro - NomeUtente.ods
(14.48 KiB) Scaricato 83 volte
Ant52
Messaggi: 176
Iscritto il: sabato 18 agosto 2018, 15:38

Re: Nome computer variabile

Messaggio da Ant52 »

Ho fatto alcune prove ma senza alcun risultato. Poi mi è venuto il dubbio di non essere stato chiaro nell'esposizione del problema. Infatti quando si avvia la macro postata viene visualizzata la finestra del MsgBox con i dati del file nel quale si trova la macro mentre a me interessano i dati del file di destinazione che si trova sul desktop e che viene aperto dalla macro. Per sintetizzare mi servirebbe una istruzione o una subroutine (non saprei come definirle) che rilevi automaticamente il nome del pc in cui si trova il file ricevente che viene aperto dalla macro in cui si trova il file da copiare.
Spero di essere stoto chiaro ma, ovviamente, posso allegare dei file esplicativi se necessario. Grazie ancora per la pazienza.
OpenOffice 4.1.5 Windows 10
Avatar utente
lucky63
Volontario assiduo
Volontario assiduo
Messaggi: 2996
Iscritto il: martedì 18 maggio 2010, 17:01

Re: Nome computer variabile

Messaggio da lucky63 »

Conferma che il file con la macro viene lanciato dallo stesso spazio disco (C:\User\Lenovo\......) contenente il file archivio.
Ant52
Messaggi: 176
Iscritto il: sabato 18 agosto 2018, 15:38

Re: Nome computer variabile

Messaggio da Ant52 »

Certamente si. In pratica ricevo questo file via mail lo scarico sul PC e con la macro che si trova nel file che ho scaricato apro un altro file sul mio PC e copio un insieme di dati. Quindi i due file stanno nello stesso PC.
OpenOffice 4.1.5 Windows 10
Avatar utente
lucky63
Volontario assiduo
Volontario assiduo
Messaggi: 2996
Iscritto il: martedì 18 maggio 2010, 17:01

Re: Nome computer variabile

Messaggio da lucky63 »

Il mio esempio era solo una traccia per farti capire come poter elaborare la stringa URL acquisita automaticamente ...
...
Imposta inizialmente la macro
Sub CopiaRange
Dim DocName as object, DocUlr as string, dummy(), range as object
Doc = ThisComponent
Url = Doc.GetUrl()
Print Url
STOP
...
Ti visualizzerà il percorso Url acquisito automaticamente dal tuo PC (o dal PC/Utente che lo lancia).
Potrai applicare istruzioni successive simili al mio esempio per ricavarti quello che per te è "Lenovo" e altri PC/Utenti qualcosa di diverso.
A mio avviso sarebbe però meglio che entrambi i file si trovassero nello stesso percorso ( quindi semplificheresti in quanto Url uguale tranne che nella parte finale relativa a "NomeFile.ods").
Ant52
Messaggi: 176
Iscritto il: sabato 18 agosto 2018, 15:38

Re: Nome computer variabile

Messaggio da Ant52 »

Ho inserito, all'inizio della macro, le righe che mi hai indicato ma nel MsgBox viene sempre visualizzato il percorso del file di partenza dei dati e non quello del file di destinazione che è quello che invece mi serve per indirizzare correttamente l'apertura del file ricevente in qualsiasi pc venga scaricato il file di partenza. Poi non ho capito perchè hai scritto che "sarebbe meglio che entrambi i file si trovassero nello stesso percorso". Io pensavo di avere chiarito che il file di partenza viene scaricato sul desktop del pc (e quindi avrà un percorso del tipo C:\Users\NomePC\Desktop\NomeFile) e che, tramite una macro, aprirà un altro file situato sempre sul desktop del pc (quindi con un percorso identico tranne che nel nome del file) per copiare alcuni dati. Non capisco se c'è qualcosa che mi sfugge. Grazie per il supporto.
OpenOffice 4.1.5 Windows 10
Avatar utente
lucky63
Volontario assiduo
Volontario assiduo
Messaggi: 2996
Iscritto il: martedì 18 maggio 2010, 17:01

Re: Nome computer variabile

Messaggio da lucky63 »

Ant52 ha scritto:o pensavo di avere chiarito che il file di partenza viene scaricato sul desktop del pc (e quindi avrà un percorso del tipo C:\Users\NomePC\Desktop\NomeFile) e che, tramite una macro, aprirà un altro file situato sempre sul desktop del pc (quindi con un percorso identico tranne che nel nome del file) per copiare alcuni dati.
Quindi rientriamo nella fattispecie migliore (entrambi i file nella stessa cartella "Desktop" ma anche potenzialmente in qualsiasi altra cartella
...
Vedi se così ti è più chiaro il risultato.

Codice: Seleziona tutto

Sub CopiaRange
Dim DocName as object, DocUlr as string, dummy(), range as object
Doc = ThisComponent
REM ===========================================================
Rem Acquisisco URL completo relativo a QUALSIASI PC da cui venga avviato il file
Url = Doc.GetUrl()
' Url Window sarà del tipo: file:///C:/Users/NomeUtente/.../.../NomeDelFileDiAvvioDellaMacro.ods
' Url Linux  sarà del tipo: file:///home/NomeUtente/.../.../NomeDelFileDiAvvioDellaMacro.ods
' Url Mac    sarà del tipo: file:///Users/NomeUtente//.../.../NomeDelFileDiAvvioDellaMacro.ods
'
' il file quando scaricato/eseguito sul Desktop di un'altro PC/Utente
' con l'istruzione .GetUrl() restituirà URL del PC/Utente (posizione di avvio dove è stato scaricato)
' Essendo entrambi i file sul Desktop cambia solo la parte finale "NomeDelFileDiAvvioDellaMacro.ods".
' Quindi trovando la posizione dell'ultima / del Url riesco poi a estrarre la parte iniziale 
' fino all'ultima / escluso il "NomeDelFile.ods" di avvio della macro
' per concatenare poi quanto così estratto con il "NomeDelFileDell'ArchivoEsterno.ods"
' Parte iniziale che sarà pertanto uguale per entrambi nel formato suddetto escluso NomeDelFile. 
'
REM Trovo la posizione dell'ultima / all'interno della stringa dell'URL acquisito automaticamente.
For X = Len(Url) To 1 Step -1
 If InStr(X , Url , "/") <> 0 Then
 PosizioneUltimaBarra = X
 X = 0
 End If
Next
UrlSenzaNomeFile = Left(url , PosizioneUltimaBarra)
'MsgBox (UrlSenzaNomeFile , 0 , "URL senza il nome del file") 'Verifica OK
REM ===========================================================

Sheet = Doc.Sheets(0)
Range1 = Sheet.getCellRangeByName("B6:B27").getDataArray ' range da copiare
Range2 = Sheet.getCellRangeByName("D6:D27").getDataArray ' range da copiare
Dim Args(0) As New com.sun.star.beans.PropertyValue
Args(0).Name = "MacroExecutionMode"
Args(0).Value = com.sun.star.document.MacroExecMode.ALWAYS_EXECUTE_NO_WARN

REM ===========================================================
' Altre modifiche rispetto al tuo esempio: 
' sFileName = "C:\Users\Lenovo\Desktop\NomeFile.ods" ' file destinazione
' DocUrl = ConvertToURL(sFileName)
DocUrl = UrlSenzaNomeFile & "NomeDelFileDell'ArchivoEsterno.ods" ' Url completo del file di destinazione
REM ===========================================================

DocName = StarDesktop.loadComponentFromURL (DocUrl, "_blank",0, Args() )
NomeFile = DocName.Sheets(2)

dRange1 = NomeFile.getCellRangeByName("B6:B27") ' range destinazione
dRange1.setDataArray(Range1)
dRange2 = NomeFile.getCellRangeByName("D6:D27") ' range destinazione
dRange2.setDataArray(Range2)
DocName.store()
Doc.Close(true)

End Sub
Ant52
Messaggi: 176
Iscritto il: sabato 18 agosto 2018, 15:38

Re: [Risolto] Nome computer variabile

Messaggio da Ant52 »

Ho modificato 4 macro secondo i tuoi suggerimenti e, come era ovvio aspettarsi, funzionano tutte perfettamente. La parte iniziale l'avevo modificata correttamente ma nel percorso del file non avevo capito che bastava aggiungere la & tra l'URL ottenuto automaticamente e il nome del file stesso e mi sono perso con barre(\ e /) a destra e sinistra. Ti ringrazio moltissimo per il preziosissimo aiuto e la pazienza nel seguire passo passo i principianti come me. Buona giornata.
OpenOffice 4.1.5 Windows 10
Rispondi