› Sviluppare funzionalita su Microsoft Office con VBA › sincronizzare tra file excel nel pc e sito
-
AutoreArticoli
-
Salve vorrei sapere se possibile poter sincronizzare tra un file excel nel pc ed una tabella creata con un plug in di wordpress nel sito.
Ho un sito wordpress questo https://love4music.altervista.org/news-del-mese-di-febbraio-2019/ in questa pagina con questa tabella carico una tabella con il file csv ma in pratica la carico anche più volte al giorno, aggiungo dei brani ogni rigo.
Vorrei che aggiungendo le righe nel file excel in automatico venissero aggiunte nella tabella del sito. Secondo te è possibile?In pratica la tabella viene creata da un plug in per wordpress che si chiama Tablepress ed i dati li prende da un file csv che o carico io materialmente o potrei metterlo nel server il file csv e prendere i dati in automatico da questo file nel server, ma resta sermpre il problema che ad ogni aggiornamento devo caricare il file nel server tramite ftp.
ad ogni aggiornamento devo caricare il file nel server tramite ftp.
Questo è il punto chiave del problema.
Da Excel occorre cercare un modo per automatizzare questa operazione di caricamento.
Io non ho esperienza di ftp. Come avviene il caricamento manuale? Hai un client ftp come FileZilla o FreeFTP e esegui da lì le operazioni di trascinamento e caricamento? In questo caso, funziona come un normale file explorer, cioè tu inserisci dei file in una cartella locale e poi il gestore ftp provvede al caricamento?
Grazie per la risposta e per l'interessamento ti spiego e ti allego anche uno screen shot. Io attualmente ho fatto le operazioni di caricamento dal backend del plug in che vedi nello screenshot, come vedi c'è carica file, io vado a scegliere il file csv dal mio pc, si carica nel server del sito, poi faccio sostituisci quello esistente ed importo, ed in questo modo vengono aggiornati i dati che si vedono nella tabella.
Il plug in ha anche un estensione auto update che farebbe l'auto update da un file caricato precedentemente nel server o che si trovi in un URL che metto. Questi sono anche altri metodi di caricamento dei dati per l'aggiornamento. Per accedere al server posso farlo o dal backend del sito e caricare il file nel server o anche con Filezilla. Io sono l'amministratore del sito.
Ho già chiesto al proprietario del plug in se era possibile una sincronizzazione e mi ha detto che non c'è modo che il plug in comunichi con il mio pc. Ma io ho pensato visto che posso mettere il file nel server in una cartella specifica che ha un indirizzo specifico con user name e password ecc. Magari con l'auto update dell'estensione extra forse potrei automatizzare il tutto.
Ti allego uno screenshot di tutta la parte visibile del backend del sito e della parte del plug in e anche noti la parte della configurazone dell'autoupdate.
Allegati:
You must be logged in to view attached files.Non sono sicuro di poterti rispondere ma proverò a pensare a qualcosa.
Un metodo che ho usato in passato per caricare velocemente e automaticamente file su server FTP è tramite Batch File di Windows..
Questo un esempio di file..
--------------------------------------------------------------
@echo off
:: CSV file path + filename
set x=%userprofile%\Documents\TEST.csv:: Echo the FTP commands to a text file
echo open ftp .sito.com>ftpcmdtemp.txt
echo username>>ftpcmdtemp.txt
echo password>>ftpcmdtemp.txt
echo binary>>ftpcmdtemp.txt
echo cd public_html/tuacartella/ >>ftpcmdtemp.txt
echo put %x%>>ftpcmdtemp.txt
echo quit>>ftpcmdtemp.txt:: FTP Execution Commands
ftp -s:ftpcmdtemp.txt %x%--------------------------------------------------------------
Inserisci tutto in un file di testo, modifica con i tuoi dati dove è evidenziato in rosso e salvi in formato .bat, es "Carica.bat"Eseguendo il file come amministratore, il file verrà caricato su FTP immediatamente..
Adesso puoi impostare un'attività pianificata su Windows (per caricare il file ogni tot ore..) oppure... gli esperti vba sapranno dire se è possibile eseguire questo script alla chiusura o salvataggio del file..
Io lo sapevo che vion aveva una soluzione in tasca, sono stato tentato dal chiamarlo in causa direttamente
se è possibile eseguire questo script alla chiusura o salvataggio del file
claro que si
grazie anche a vion per il suggerimento volevo capire oltre alla parte rossa devo cambiare penso anche http://ftp.sito.com con il mio sito https://love4music.altervista.org/ invece in public_html/tuacartella/ credo che devo mettere la cartella dove deve andare a finire il file.
Attualmente la cartella base è /membri/love4music/
Sì, devi mettere i dati congruenti con il tuo progetto ftp, in modo che lo script possa inserirli correttamente in remoto.
nel mio codice la formattazione automatica ha aggiunto l'http, ma in realtà non va messo..
Nel tuo caso quindi l'indirizzo ftp da mettere è solo love4music.altervista.orgcartella base è /membri/love4music/
Si, se non ricordo male, è quello il root path di altervista
PS. Salutami Francesco Forever, abbiamo collaborato in passato 🙂 (gestisco programmi "Kanto Karaoke").
Grazie Vion ho fatto delle prove ma non mi funziona.
Qui sotto ho messo il file batch creato ma quando faccio esegui come amministratore mi spunta una schermata nera tante scritte che non riesco a leggere perchè poi si chiude in automatico.
Ho controllato i parametri nel pannello di controllo e sono questi non so bene il percorso da mettere per raggiungere la cartella che ho creato Tabelle_news subito accedendo alla cartella root. Se vedo nella schermata del plug in mi dice /membri/love4music se accedo tramite Filezilla è subito /Tabelle_news le ho provate tutte ma nessun file viene trasferito. Ho fatto una richiesta nel forum di supporto di Altervista vedremo che mi rispondono. Ti allego lo screenshot della parte del plug in
:: CSV file path + filename
set x=%userprofile%\OneDrive\karaoke\Tabella News Febbraio.csv:: Echo the FTP commands to a text file
echo open ftp .love4music.altervista.org>ftpcmdtemp.txt
echo love4music>>ftpcmdtemp.txt
echo xxxxxxxxxx>>ftpcmdtemp.txt
echo binary>>ftpcmdtemp.txt
echo cd /membri/love4music/Tabelle_news>>ftpcmdtemp.txt
echo put %x%>>ftpcmdtemp.txt
echo quit>>ftpcmdtemp.txt:: FTP Execution Commands
ftp -s:ftpcmdtemp.txt %x%Per quanto riguarda Franscesco Forever purtroppo lui se ne uscito dal forum ora è gestito da Gianni Lauricella. Io non ho conosciuto Francesco mi dispiace.
Allegati:
You must be logged in to view attached files.set x=%userprofile%\OneDrive\karaoke\Tabella News Febbraio.csv
credo sia qui il problema perchè il nome del file ha degli spazi..
prova a mettere tutto il percorso tra virgolette:
set x="%userprofile%\OneDrive\karaoke\Tabella News Febbraio.csv"
Funziona il trasferimento ma non capisco come mai non va dentro la cartella che ho creato Tabelle_news nella root ma il filve va nella root direttamente ti faccio uno screenshoot del programma Filezilla
Allegati:
You must be logged in to view attached files.modifica la riga
echo cd /membri/love4music/Tabelle_news>>ftpcmdtemp.txt
con
echo cd Tabelle_news >>ftpcmdtemp.txt
Perfetto grande funziona è andato nella cartella Tabelle News
Ora mi resta capire tramite una macro ad eseguire questo file batch.
Io nel file excel ho una macro che mi salva il foglio in file csv.
Bisognerrebbe aggiungere dopo aver salvato di eseguire il file batch.
Ho una necessità da chiedervi e da modificare in questa macro ma anche nel file batch.
Siccome il file viene trasferito anche ad altri utenti e che questi potrebbero salvarlo in altra parte del pc penso che il percorso inpostato sia nel file batch che in questa macro dovrebbero essere modificati ma non so come. Un percorso generale si può? Che ne so forse My Path andrebbe bene?
Poi capite bene che ogni volta che cambia il mese dovrei cambiare il nome della tabella e quindi per evitare di andare a modificare il nome del file batch che la macro c'è la possibilità di impostare una cella nel file excel che ne so metti come nome il valore di cella"n1" quindi quando sostituisco nella cella "n1" da Febbraio a Marzo ecc mi cambia sia il nome della tabella csv che quindi il file batch. ecc.
Poi altra esigenza un po alla stessa maniera è possibile dire alla macro qui sotto di salvare fino al rigo impostato nella cella "o1" il file csv. Ma non so come impostare.
Perchè nel file excel noi inseriamo i righi e ci portiamo avanti nelle giornate ma quando pubblico il file csv vorrei che venissero pubblicate solo i righi che portano la data fino a domani esempio. Spero che mi sia spiegato bene.
Sub SlavaCSV() percorso = Environ("USERPROFILE") & "\OneDrive\karaoke\" nome = "Tabella News" ActiveSheet.Copy ActiveSheet.SaveAs Filename:=percorso & nome & ".csv", _ FileFormat:=xlCSV, Password:="", WriteResPassword:="", _ ReadOnlyRecommended:=False, CreateBackup:=False, Local:=True ActiveWindow.Close End Sub
Quanta carne al fuoco 🙂 QUi ci vuole un pochino di tempo e pazienza, ma ci arriviamo. Sicuramente per quanto riguarda il percorso, è necessario che sia unico e conosciuto da tutti, oppure bisogna che si apra la finestra di "apri file", per esempio, altrimenti il codice da solo non può immaginare dove l'utente salva il file batch per eseguirlo, salvo fare una scansione dell'intero disco ma è una follia 🙂
si intanto ti ringrazio anticipatamente e pazienza ce ne, sicuramente non ho premura.
Non mi permetterei assolutamente, già il solo fatto che mi stai dando una bella mano e solo da dirti infinitamente grazie.
Per il file batch credo che non ci siano problemi dove andarlo a mettere perchè dirò di metterlo nella stessa cartella del file excel principale che è il file .xlsm
Il file csv si può semplicemente salvare nella stessa cartella dove si trovano sia il file batch che il file .xlsm o vuoi che ti debba dire dove lo devo mettere per forza?
Ti ho allegato il file principale xlsm
No il fatto del perscoso lo chiedevo perchè magari io li metto in un posto, un altra persona che ci lavorerà pure lo salva in documenti ecc e quindi per come sono scritti sia il file batch che la macro giustamente se i file sono salvati in altro posto magari poi non funzionano. Credo. Tutto qui.
Allegati:
You must be logged in to view attached files.Il problema vero non è star dietro alle tue richieste, che sono tutte fattibili, è che ci vuole un pochino di pazienza per elaborare qualcosa che sia efficiente e affidabile, quindi come dico sempre, se vedi che la discussione langue (senza nessun altro intervento da parte di altri) allora mandami un messaggio privato di promemoria 🙂
Ok tranquillo. non preoccuparti capisco che ci sono tanti altri che ti chiedono aiuto in altri e non ci sono solo io. Fai tranquillamente con comodo.
Bisogna che andiamo un po' per gradi.
Anzitutto vorrei vedere anche il contenuto del file batch.
Nella routine del salvataggio come csv (che devi rinominare perchè è scritto "SlavaCSV" invece di "SalvaCSV") puoi aggiungere questa riga per eseguire il file bat:
CreateObject("WScript.Shell").Run Chr(34) & ThisWorkbook.Path & "\test.bat" & Chr(34)
dove chiaramente invece che "test.bat" devi mettere il nome vero del file batch. Il quale come vedi viene adesso eseguito dalla stessa cartella di dove risiede il file Excel su cui stai lavorando.
Per salvare il file csv nella medesima cartella agisci sul codice di SalvaCSV:
Option Explicit Sub SalvaCSV() Dim percorso As String Dim nome As String 'percorso = Environ("USERPROFILE") & "\OneDrive\karaoke\" '<--- vecchio percorso percorso = ThisWorkbook.Path & "\" nome = "Tabella News" With ActiveSheet .Copy .SaveAs Filename:=percorso & nome & ".csv", _ FileFormat:=xlCSV, Password:="", WriteResPassword:="", _ ReadOnlyRecommended:=False, CreateBackup:=False, Local:=True .Close False End With CreateObject("WScript.Shell").Run Chr(34) & ThisWorkbook.Path & "\test.bat" & Chr(34) End Sub
Non metti mai Option Explicit, abituati a farlo 🙂
Ho fatto come hai detto, la cartella me l'ha creata ma cmq mi ha data un errore di run-time 438 proprietà o metodo non supportati dall'ogetto. Ho cliccato debug e mi ha dato errore nella riga
.Close False
questo è il file Carica.bat
@echo off :: CSV file path + filename set x="%userprofile%\OneDrive\karaoke\Tabella News Febbraio.csv" :: Echo the FTP commands to a text file echo open ftp.love4music.altervista.org>ftpcmdtemp.txt echo love4music>>ftpcmdtemp.txt echo mia password>>ftpcmdtemp.txt echo binary>>ftpcmdtemp.txt echo cd Tabelle_news >>ftpcmdtemp.txt echo put %x%>>ftpcmdtemp.txt echo quit>>ftpcmdtemp.txt :: FTP Execution Commands ftp -s:ftpcmdtemp.txt %x%
Volevo dei chiarimenti quindi il codice che tu mi hai suggerito il primo crea il file .bat? Ogni volta?
Poi nel file .bat posso a questo punto modificare pure il percorso
`set x="%userprofile%\OneDrive\karaoke\Tabella News Febbraio.csv" con questo ? sperando che la sintassi sia giusta. set x="ThisWorkbook.Path & "\" Tabella News Febbraio.csv" `
Poi per resto allora man mano.
il codice che tu mi hai suggerito il primo crea il file .bat? Ogni volta?
No, il file bat è sempre soltanto quello, si trova nella cartella del file Excel ed è semplicemente eseguito dal file che crea la shell e usa il metodo Run.
La sintassi che hai usato per impostare il nome del mese corrente è sbagliata, perchè è un file di DOS e non di VBA. L'accrocchio da utilizzare è chiamare il file bat con il parametro che viene poi passato alla variabile di ambiente "x":
'se fossi in DOS lo richiamerei in questo modo: C:\>test.bat Febbraio 'il file bat viene modificato così: set x = "%userprofile%\OneDrive\karaoke\Tabella News %1.csv"
Si può automatizzare ma per darti una risposta completa devo pensarci un attimo (per non scrivere caxxate e fare quindi brutta figura 🙂 )
Intanto non fai brutta figura assolutamente.
no mi sta bene con il file bat volevo solo modificare il percorso da %userprofile%\OneDrive\karaoke alla stessa cartella del file senza mettere percorsi specifici, perchè come ti dicevo il file verrà utilizzato da altri utenti e che salveranno i file excel e bat nelle proprie cartelle e percorsi se metto un percorso specifico nel codice poi non funziona? giusto?
Poi mentre rifletti se posso chiederti cosa che avevo fatto prima il file bat come dici viene fatto avviare dopo che viene salvato il file csv.
Mi serve che il nome del file abbia questo nome Tabella news (valore cella N1) così ogni volta che cambia il mese mi basta cambiare il valore della cella.
Poi non so se hai avuto modo di provare il codice sopra che mi hai indicato mi capitano oltre all'errore che ti ho segnalato una cosa che prima non capitava. Mi si apre un file excel chiamato Cartel1 con gli stessi dati del file originale excel che ti avevo messo qualche post prima. E poi questo stesso file excel che si chiama Tabella news Febbraio.xlsm mi diventa Tabella news.csv ma con gli stessi dati del file xlsm. visivamente con due fogli ecc, ma se il file csv lo chiudo e lo riapro è normale con un foglio come dovrebbe essere e i dati come dovrebbero essere. Ti consiglio di fare una prova e verificare. Mi tocca chiudere il file Carte1 e non salvare ed il medesimo file csv e non salvare
Se "karaoke" è una cartella condivisa in OneDrive, allora chiunque abbia il permesso di leggere quella cartella la vedrà e potrà accedere ai file in essa contenuti. Quindi non ha importanza dove sta il singolo file Excel locale, perchè il percorso sarà uguale per tutti: OneDrive\karaoke.
Gli utenti non salveranno alcun file bat perchè questo si troverà già fatto e finito nella cartella karaoke, dove verrà solamente eseguito e non modificato: verrà eseguito passandogli un parametro, il nome del mese che si trova nella cella N1, e poi lui penserà a recuperare il file csv che nel frattempo sarà stato creato dall'utente e depositato nella stessa cartella karaoke.
Non ho avuto ancora modo di testare il codice mal funzionante.
si ho capito che la cartella di onedrive è condivisa no ma io darei il file tutto. Quindi le altre due persone se lo potranno salvare dove vogliono. Quindi a questo punto toglierei il file da onedrive.
se lo potranno salvare dove vogliono
E' necessario che tu dia chiara l'indicazione non "di salvare dove vogliono" ma in una locazione ben precisa, dove il tuo codice sa che troverà il file da eseguire. Quindi per esempio puoi dire agli interessati di salvare il file bat nella stessa cartella del file Excel, in modo che tu puoi farvi riferimento con ThisWorkbook.Path.
-
AutoreArticoli