come estrarre dati da un foglio writer e inserirli automatic
come estrarre dati da un foglio writer e inserirli automatic
Per ogni cliente ho un documento Writer di una sola pagina. tutti i documenti writer hanno il nome e cognome del cliente riportato ad un certo rigo (esempio al 4° rigo), l'indirizzo ad un altro rigo (esempio al 6° rigo) etc. Io dovrei estrarre i dati da un documento Writer quali nome cognome e indirizzo e farli inserire automaticamente su una lettera scritta (uguale per tutte) su altro documento writer in dei righi stabiliti.
Quindi ad ogni documento Writer corrisponde un utente e io devo scrivere una lettera (di uguali contenuti, cambiando solo le generalità e l'indirizzo) a ciascun utente.
Ripeto i dati sono soltanto su documenti Writer ognuno per ogni cliente. Faccio presente che non mi è possibile usare calc o altro. Posso usare solo Writer. Potete aiutarmi?
Quindi ad ogni documento Writer corrisponde un utente e io devo scrivere una lettera (di uguali contenuti, cambiando solo le generalità e l'indirizzo) a ciascun utente.
Ripeto i dati sono soltanto su documenti Writer ognuno per ogni cliente. Faccio presente che non mi è possibile usare calc o altro. Posso usare solo Writer. Potete aiutarmi?
OpenOffice 4.1 su Windows 7 professional
Re: come estrarre dati da un foglio writer e inserirli autom
Questi dati sono almeno scritti in caselle di testo?
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Re: come estrarre dati da un foglio writer e inserirli autom
No, i dati sono scritti in un foglio writer senza casella di testo, e sono stampati automaticamente da un programma proprietario sul quale devo solo caricare i dati. il documento writer che si apre ha sempre i dati che mi interessano per scrivere le lettere di trasmissione, li ha sempre nel medesimo rigo per ciascun cliente. (cognome e nome nel II rigo, indirizzo sempre nel 6° rigo, etc)
OpenOffice 4.1 su Windows 7 professional
Re: come estrarre dati da un foglio writer e inserirli autom
E nel rigo ci sono solo questi dati giusto? Nemmeno un’altra parola è presente
Ultima modifica di unlucky83 il lunedì 29 ottobre 2018, 10:09, modificato 1 volta in totale.
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Re: come estrarre dati da un foglio writer e inserirli autom
TI ALLEGO UN ESEMPIO:
Intestatario: Rossi Giuseppe
Nato a: PALERMO (PA) il 10/09/1998
Codice Fiscale: GAAAPP98P03G273P
Residente in: VIA CARTINI, 50 PALERMO (PA)
In qualità di: TITOLARE
Su Writer è scritto come vedi qui sopra. Io di questi dati devo prendere il nome e cognome e l'indirizzo e metterli nella lettera che scrivo al cliente.
Intestatario: Rossi Giuseppe
Nato a: PALERMO (PA) il 10/09/1998
Codice Fiscale: GAAAPP98P03G273P
Residente in: VIA CARTINI, 50 PALERMO (PA)
In qualità di: TITOLARE
Su Writer è scritto come vedi qui sopra. Io di questi dati devo prendere il nome e cognome e l'indirizzo e metterli nella lettera che scrivo al cliente.
OpenOffice 4.1 su Windows 7 professional
Re: come estrarre dati da un foglio writer e inserirli autom
Procediamo per gradi.
Allego file di esempio contenente macro che estrae i due dati e li visualizza in un messaggio a schermo. Le parole chiave della ricerca sono "Intestatario:" e "Residente in:" e mi interessa esclusivamente la prima occorrenza. L'esistenza delle parole chiavi mi consente di rintracciare il nominativo e l'indirizzo anche se tra i vari documenti il rigo in cui vengono scritti dovesse cambiare.
Il passaggio successivo è aggiungere una macro che prenda questi due valori e li scriva in un secondo file. Poi ci serve adattare le macro in modo tale da salvarle non nel documento, ma nella cartella personale di openoffice/libreoffice, in modo tale da essere sempre disponibili e funzionanti.
Spero che non hai fretta, perchè principalmente mi occupo di macro per calc perciò non ho codici già confezionati.
Allego file di esempio contenente macro che estrae i due dati e li visualizza in un messaggio a schermo. Le parole chiave della ricerca sono "Intestatario:" e "Residente in:" e mi interessa esclusivamente la prima occorrenza. L'esistenza delle parole chiavi mi consente di rintracciare il nominativo e l'indirizzo anche se tra i vari documenti il rigo in cui vengono scritti dovesse cambiare.
Codice: Seleziona tutto
Sub Search_NameAddress()
Dim mySearch As Object, myResult As Object, myElement As Object
Dim i as integer
mySearch = thisComponent.createSearchDescriptor()
mySearch.searchRegularExpression = True
mySearch.searchString = "Intestatario:.*\n"
myResult = thisComponent.findAll(mySearch)
If myResult.hasElements Then
Destinatario=mid(myResult.getByIndex(0).String,len("Intestatario: ")+1,len(myResult.getByIndex(0).String)-len("Intestatario: "))
' For i = 0 to myResult.count-1
' myElement = myResult.getByIndex(i)
' Next i
End If
mySearch.searchString = "Residente in:.*\n"
myResult = thisComponent.findAll(mySearch)
If myResult.hasElements Then
Indirizzo=mid(myResult.getByIndex(0).String,len("Residente in: ")+1,len(myResult.getByIndex(0).String)-len("Residente in: "))
' For i = 0 to myResult.count-1
' myElement = myResult.getByIndex(i)
' Next i
End If
msgbox Destinatario & chr(13) & Indirizzo
End Sub
Spero che non hai fretta, perchè principalmente mi occupo di macro per calc perciò non ho codici già confezionati.
Peccato, perchè sarebbe bastato salvare i dati prelevati dalla macro per costruire una tabella in calc per poi sfruttare la stampa in serie. Non potendo usare ne Calc ne Base, dobbiamo costruirci una "stampa in serie" fai da te.Faccio presente che non mi è possibile usare calc
- Allegati
-
- Nomi_Indirizzi_Estrai.odt
- (11.26 KiB) Scaricato 174 volte
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Re: come estrarre dati da un foglio writer e inserirli autom
unlucky83 Ti ringrazio moltissimo e spero che arriveremo ad un buon risultato! purtroppo io non ne capisco niente di come si usa una macro e di dove si deve salvare. Per quanto riguarda Calc, ce l'ho ho nel pc, ma non lo so usare. Però se è meglio utilizzare calc allora ci proverò. nel foglio writer, io parto da una tabella compilata (per ogni cliente) che ti allego. Con i dati della tabella dovrei riuscire a scrivere una lettera che ti allego ugualmente. Ti ringrazio anticipatamente.
- Allegati
-
- dati da tabella a lettera di trasmissione.odt
- (19.92 KiB) Scaricato 167 volte
OpenOffice 4.1 su Windows 7 professional
Re: come estrarre dati da un foglio writer e inserirli autom
Visto che sia con le macro sia con Calc e Base stai a digiuno, ti spiego a grandi linee cosa è possibile fare e cerco di spiegarti i pro e i contro del fare tutto con le macro.
Riguardo Calc:
il file calc è un foglio elettronico e per i nostri scopi è sufficiente che usi un solo foglio e che costruiamo una tabella di questo tipo La tabella è facile da costruire e gestire manualmente, ma si potrebbe usare la macro per estrarre i dati dai report che hai. Se hai tantissimi dati da estrarre è meglio far costruire la tabella alla macro, poi vediamo come.
Riguardo Base:
Base è il software per i database. Quello che dovremmo fare per sfruttare la stampa in serie di writer è creare un database connesso al file calc. Una volta preparato dovremmo registrare il database. Fatte queste due cose non ci sarà bisogno di aprire mai più il file base...sarà un file "ponte" che il file writer userà per collegarsi alla rubrica creata nel file calc.
Riguardo Writer:
La lettera per la stampa in serie dovrà contenere dei nomi di campo di questo tipo: attachment=1]Schermata del 2018-10-26 15-27-23.png[/attachment]
Inserire i nomi di campo non sarà difficile e saranno collegati al database registrato, quindi indirettamente al file calc "rubrica". Attivare la stampa in serie sarà facile, perchè basterà cliccare sull'icona della stampa e ti verrà chiesto se vuoi stampare la Lettera "modello" oppure se fare la stampa in serie. Ti verrà anche chiesto se stampare su file, quindi creare una serie di file writer, o mandare direttamente in stampa alla stampante.
Vantaggi di usare sia calc sia base:
In calc potrai consultare, modificare, eliminare le voci presenti quando vuoi e come vuoi. Base ti consentirà di usare la funzionalità stampa in serie di libreoffice/openoffice e non c'è bisogno di imparare ad usare Base. La lettera Modello potrai modificarla come meglio preferisci senza preoccuparti di non far inceppare alcuna macro, perchè non ce ne sarà bisogno.
Svantaggi:
Avrai tre file, Lettera.odt, Rubrica_Lettera.ods, Rubrica_Lettera.odb e le ultime due non potrai spostarle da una cartella all'altra perchè altrimenti il file odb non troverebbe la connessione al file ods e libreoffice non troverebbe il db registrato.
Tutto con macro:
Fare tutto con macro può dare vari problemi soprattutto se non si tiene conto di tutti i casi che possono verificarsi. Quello che mi preoccupa è la velocità di calcolo...la stampa in serie è sviluppata da programmatori esperti e stampare in serie un centinaio di file richiede poco tempo..farlo fare alla macro richiederà sicuro più tempo e non sò prevedere quanto. Il grande svantaggio della macro è che se qualcosa va storto nell'esecuzione, bisognerà intervenire sul codice e quindi o impari a fare qualche piccola modifica al codice oppure tornerai sempre qui e dipenderai da altri.
In conclusione:
Ritengo che la macro sia utile per inserire il file calc nel caso che tu abbia la rubrica molto grande da compilare e variabile spesso. Se non è così, vale la pena copiare e incollare manualmente i dati in calc.
Le due procedure "complesse" (nemmeno tanto) sono solo creare un db base collegato al file calc e registrarlo. Entrambe le operazioni vanno fatte però una volta soltanto, a meno che non ti metti a spostare i due file da una cartella ad un'altra.
p.s.
nel tuo allegato i dati da estrarre sono all'interno di una tabella. Anche il file originale presenta i valori interni ad una tabella? Le didascalie a sinistra dei campi che ti interessano sono scritte così nel file? Devi essere chiaro su queste cose perchè le macro richiedono di essere precisi altrimenti non funzionano
Riguardo Calc:
il file calc è un foglio elettronico e per i nostri scopi è sufficiente che usi un solo foglio e che costruiamo una tabella di questo tipo La tabella è facile da costruire e gestire manualmente, ma si potrebbe usare la macro per estrarre i dati dai report che hai. Se hai tantissimi dati da estrarre è meglio far costruire la tabella alla macro, poi vediamo come.
Riguardo Base:
Base è il software per i database. Quello che dovremmo fare per sfruttare la stampa in serie di writer è creare un database connesso al file calc. Una volta preparato dovremmo registrare il database. Fatte queste due cose non ci sarà bisogno di aprire mai più il file base...sarà un file "ponte" che il file writer userà per collegarsi alla rubrica creata nel file calc.
Riguardo Writer:
La lettera per la stampa in serie dovrà contenere dei nomi di campo di questo tipo: attachment=1]Schermata del 2018-10-26 15-27-23.png[/attachment]
Inserire i nomi di campo non sarà difficile e saranno collegati al database registrato, quindi indirettamente al file calc "rubrica". Attivare la stampa in serie sarà facile, perchè basterà cliccare sull'icona della stampa e ti verrà chiesto se vuoi stampare la Lettera "modello" oppure se fare la stampa in serie. Ti verrà anche chiesto se stampare su file, quindi creare una serie di file writer, o mandare direttamente in stampa alla stampante.
Vantaggi di usare sia calc sia base:
In calc potrai consultare, modificare, eliminare le voci presenti quando vuoi e come vuoi. Base ti consentirà di usare la funzionalità stampa in serie di libreoffice/openoffice e non c'è bisogno di imparare ad usare Base. La lettera Modello potrai modificarla come meglio preferisci senza preoccuparti di non far inceppare alcuna macro, perchè non ce ne sarà bisogno.
Svantaggi:
Avrai tre file, Lettera.odt, Rubrica_Lettera.ods, Rubrica_Lettera.odb e le ultime due non potrai spostarle da una cartella all'altra perchè altrimenti il file odb non troverebbe la connessione al file ods e libreoffice non troverebbe il db registrato.
Tutto con macro:
Fare tutto con macro può dare vari problemi soprattutto se non si tiene conto di tutti i casi che possono verificarsi. Quello che mi preoccupa è la velocità di calcolo...la stampa in serie è sviluppata da programmatori esperti e stampare in serie un centinaio di file richiede poco tempo..farlo fare alla macro richiederà sicuro più tempo e non sò prevedere quanto. Il grande svantaggio della macro è che se qualcosa va storto nell'esecuzione, bisognerà intervenire sul codice e quindi o impari a fare qualche piccola modifica al codice oppure tornerai sempre qui e dipenderai da altri.
In conclusione:
Ritengo che la macro sia utile per inserire il file calc nel caso che tu abbia la rubrica molto grande da compilare e variabile spesso. Se non è così, vale la pena copiare e incollare manualmente i dati in calc.
Le due procedure "complesse" (nemmeno tanto) sono solo creare un db base collegato al file calc e registrarlo. Entrambe le operazioni vanno fatte però una volta soltanto, a meno che non ti metti a spostare i due file da una cartella ad un'altra.
p.s.
nel tuo allegato i dati da estrarre sono all'interno di una tabella. Anche il file originale presenta i valori interni ad una tabella? Le didascalie a sinistra dei campi che ti interessano sono scritte così nel file? Devi essere chiaro su queste cose perchè le macro richiedono di essere precisi altrimenti non funzionano
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Re: come estrarre dati da un foglio writer e inserirli autom
A me i dati arrivano proprio dentro quella tabella, che avevo inviato in precedenza, che è l’originale. Le didascalie a sinistra dei campi sono scritte così come le vedi. Mi arriva una tabella per ogni cliente: me ne arriva una alla volta e io per ognuna devo scrivere una sola lettera (la lettera che ho allegato in precedenza) per ogni cliente: una alla volta. Queste tabelle sono in un documento writer. Copiare manualmente (con il copia e incolla) quei dati su calc o su base non ha senso: tanto vale copiarli nella lettera che devo spedire, così come faccio attualmente. Dopo che ho fatto la lettera e l’ho spedita, ho finito il mio compito e non devo fare più nulla: non mi serve archiviare nulla e neanche un database.
OpenOffice 4.1 su Windows 7 professional
Re: come estrarre dati da un foglio writer e inserirli autom
Ho capito la situazione. Credevo che dovessi gestire numerosi documenti per volta. Vedo di preparare qualcosa che possa esserti utile.
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Re: come estrarre dati da un foglio writer e inserirli autom
In questo allegato ho salvato le macro
Possono essere salvate tra le macro personali, così non sono legate a nessun documento. In tal caso prima devi aprire il file da cui devi prelevare i dati, poi avviare la macro "RaccogliDatixLettera". Una volta avviata la macro, questa preleva i dati, apre il file modello Lettera.ott e sostituisce i campi racchiusi tra parentesi graffe ("{prot_suap}","{prot_nosto}","{destinatario}","{citta}","{indirizzo}","{pec}","{societa}").
Il tutto funziona se personalizzi questo punto della macro: mettendo tra le virgolette il percorso corretto al file Lettera.ott che ti ho allegato.
Il campo città e indirizzo per ora sono identici, perchè è inutile sprecarsi a dividerli con la macro (esistono città che hanno il nome composto da più di una parola) se ti sta bene modificarli manualmente. Sul campo pec si può migliorare l'estrazione del dato, ma nel frattempo dimmi se riesci a capire e ad eseguire questa procedura.
Le macro sono:
Codice: Seleziona tutto
REM ***** BASIC *****
Sub RaccogliDatixLettera()
Dim oDoc1 As Object
Dim oTable1 As Object
dim testo(6) As String
oDoc1=thiscomponent
oTable1=oDoc1.TextTables.getbyindex(0)
testo(0)=oTable1.getcellbyposition(1,0).String 'prot_suap
testo(1)=oTable1.getcellbyposition(1,1).String 'prot_nostro
testo(2)=oTable1.getcellbyposition(1,3).String 'destinatario
testo(3)=oTable1.getcellbyposition(1,7).String 'citta
testo(4)=oTable1.getcellbyposition(1,7).String 'indirizzo
testo(5)=oTable1.getcellbyposition(1,12).String 'pec
testo(6)=oTable1.getcellbyposition(1,6).String 'societa
'msgbox testo(1) & chr(13) & testo(2) & chr(13) & testo(3) & chr(13) & testo(4) & chr(13) & testo(5) & chr(13) & testo(6)
PreparaLettera(testo)
End Sub
Function PreparaLettera(Valori )
Dim args()
Dim campi(6) As string
Dim Replace As Object
' filename="file:///c:/users/antonio/desktop/pomodoro.ods" 'sistema windows
filename="file:///home/andrea/Scrivania/EstraiDati_PopolaOds_StampaInSerie/Lettera.ott" 'sistema linux
campi=Array("{prot_suap}","{prot_nosto}","{destinatario}","{citta}","{indirizzo}","{pec}","{societa}")
oDoc2 = StarDesktop.loadComponentFromURL (filename, "_blank",0,args() )
Replace = oDoc2.createReplaceDescriptor
For I = 0 To 6
Replace.SearchString = campi(I)
Replace.ReplaceString = Valori(I)
oDoc2.replaceAll(Replace)
Next I
End Function
Il tutto funziona se personalizzi questo punto della macro:
Codice: Seleziona tutto
filename="file:///home/andrea/Scrivania/EstraiDati_PopolaOds_StampaInSerie/Lettera.ott" 'sistema linux
Il campo città e indirizzo per ora sono identici, perchè è inutile sprecarsi a dividerli con la macro (esistono città che hanno il nome composto da più di una parola) se ti sta bene modificarli manualmente. Sul campo pec si può migliorare l'estrazione del dato, ma nel frattempo dimmi se riesci a capire e ad eseguire questa procedura.
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Re: come estrarre dati da un foglio writer e inserirli autom
unlucky83
Ti ringrazio moltissimo per l'aiuto che mi stai dando. Purtroppo non ho le basi e ho bisogno di ulteriori precisazioni:
come fare per salvare l'allegato “dati da tabella con macro.odt” tra le macro personali? Ci ho cliccato sopra e mi dice apri o salva con nome. Se faccio salva con nome, dove devo andarle a salvare? (Io, nel foglio Writer, ho visto che le macro si trovano su strumenti → macro → registra macro, esegui macro, organizza macro. Ma come ci arrivo a mettere la tua macro là?) Scusami per la mia ignoranza in materia
Ti ringrazio moltissimo per l'aiuto che mi stai dando. Purtroppo non ho le basi e ho bisogno di ulteriori precisazioni:
come fare per salvare l'allegato “dati da tabella con macro.odt” tra le macro personali? Ci ho cliccato sopra e mi dice apri o salva con nome. Se faccio salva con nome, dove devo andarle a salvare? (Io, nel foglio Writer, ho visto che le macro si trovano su strumenti → macro → registra macro, esegui macro, organizza macro. Ma come ci arrivo a mettere la tua macro là?) Scusami per la mia ignoranza in materia
OpenOffice 4.1 su Windows 7 professional
Re: come estrarre dati da un foglio writer e inserirli autom
Non c'è bisogno che ti scusi. La procedura non te l'ho spiegata nel precedente messaggio perchè non volevo sovraccaricarti di informazioni.
Chiariamo che le macro da salvare tra le macro personali sono il codice del precedente messaggio e non il file odt. Quindi:
copia il codice che ho scritto nel precedente messaggio
Apri writer
Strumenti>Macro>Organizza Macro>Libreoffice/openoffice basic
Ti si apre questa finestra Nel box di sinistra clicca sul triangolino di "macro personali", ti compare la sottovoce "Standard". Clicca sul triangolino di "Standard", questa volta non dovrebbe comparire nessuna sottovoce. Seleziona quindi "Standard" e clicca sul pulsante "Nuovo" a destra.
Si apre una finestrella in cui ti viene chiesto di dare il nome al modulo in cui salveremo la macro, ti viene suggerito "Module1". Un nome vale un altro, quindi premi direttamente su "ok".
Viene aperta la parte di libreoffice/openoffice per scrivere il codice.
Trovi scritto
Queste due righe cancellale e incolla le mie macro che avevi copiato in precedenza. Ora modifica il percorso al file modello che ti ho allegato e che hai scaricato da qualche parte nel tuo pc, mettendo quello corretto. Poi salva.
Ora le macro sono disponibili ogni qual volta apri openoffice/libreoffice. Va però eseguita la macro "RaccogliDatixLettera()" solo quando hai il file con i dati da prelevare aperto.
Per eseguire la macro, Strumenti>Macro>Macro Personali (apri l'elenco cliccando sul triangolino)>Standard (apri l'elenco cliccando sul triangolino)>Module1(apri l'elenco cliccando sul triangolino), nel box di destra seleziona "RaccogliDatixLettera". Premi "Esegui"
Perchè ti ho allegato il file odt contenente le macro?
Perchè se preferisci, potresti cancellare tutto il testo del mio file odt e copiarci di volta in volta la tabella da cui vuoi estrarre i dati. In tal caso non c'è bisogno di avere le macro salvate tra le macro personali, eseguiremo quelle incorporate nel mio file odt, quindi per eseguire la macro:
Strumenti>Macro>mioFile.odt (apri l'elenco cliccando sul triangolino)>Standard (apri l'elenco cliccando sul triangolino)>Module1(apri l'elenco cliccando sul triangolino), nel box di destra seleziona "RaccogliDatixLettera". Premi "Esegui".
Volendo nel mioFile.odt potremmo inserire un pulsante che esegua direttamente la macro senza bisogno di selezionarla tutte le volte.
Chiariamo che le macro da salvare tra le macro personali sono il codice del precedente messaggio e non il file odt. Quindi:
copia il codice che ho scritto nel precedente messaggio
Apri writer
Strumenti>Macro>Organizza Macro>Libreoffice/openoffice basic
Ti si apre questa finestra Nel box di sinistra clicca sul triangolino di "macro personali", ti compare la sottovoce "Standard". Clicca sul triangolino di "Standard", questa volta non dovrebbe comparire nessuna sottovoce. Seleziona quindi "Standard" e clicca sul pulsante "Nuovo" a destra.
Si apre una finestrella in cui ti viene chiesto di dare il nome al modulo in cui salveremo la macro, ti viene suggerito "Module1". Un nome vale un altro, quindi premi direttamente su "ok".
Viene aperta la parte di libreoffice/openoffice per scrivere il codice.
Trovi scritto
Codice: Seleziona tutto
Sub Main
End Sub
Ora le macro sono disponibili ogni qual volta apri openoffice/libreoffice. Va però eseguita la macro "RaccogliDatixLettera()" solo quando hai il file con i dati da prelevare aperto.
Per eseguire la macro, Strumenti>Macro>Macro Personali (apri l'elenco cliccando sul triangolino)>Standard (apri l'elenco cliccando sul triangolino)>Module1(apri l'elenco cliccando sul triangolino), nel box di destra seleziona "RaccogliDatixLettera". Premi "Esegui"
Perchè ti ho allegato il file odt contenente le macro?
Perchè se preferisci, potresti cancellare tutto il testo del mio file odt e copiarci di volta in volta la tabella da cui vuoi estrarre i dati. In tal caso non c'è bisogno di avere le macro salvate tra le macro personali, eseguiremo quelle incorporate nel mio file odt, quindi per eseguire la macro:
Strumenti>Macro>mioFile.odt (apri l'elenco cliccando sul triangolino)>Standard (apri l'elenco cliccando sul triangolino)>Module1(apri l'elenco cliccando sul triangolino), nel box di destra seleziona "RaccogliDatixLettera". Premi "Esegui".
Volendo nel mioFile.odt potremmo inserire un pulsante che esegua direttamente la macro senza bisogno di selezionarla tutte le volte.
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Re: come estrarre dati da un foglio writer e inserirli autom
per adesso l'ho salvata nel desktop. l'ho aperto dopo aver aperto la lettera da scrivere, ma come si attiva?
OpenOffice 4.1 su Windows 7 professional
Re: come estrarre dati da un foglio writer e inserirli autom
Sei stato veloce a leggere il messaggio..nel frattempo l'avevo modificato e ho spiegato come si attiva. Hai letto quella parte?
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Re: come estrarre dati da un foglio writer e inserirli autom
Non è importante che La lettera da scrivere sia aperta, verrà aperta in automatico dalla macro con i campi estratti dal file che ti viene spedito. È quest’ultimo che deve essere assolutamente aperto prima di avviare là macro salvata tra le macro personali.gio1234 ha scritto:per adesso l'ho salvata nel desktop. l'ho aperto dopo aver aperto la lettera da scrivere, ma come si attiva?
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Re: come estrarre dati da un foglio writer e inserirli autom
Ho copiato le macro così come mi avevi scritto. poi per il file “odt contenente le macro” ho fatto salva con nome e ho immesso l'indirizzo che mi avevi scritto “file:///home/andrea/Scrivania/EstraiDati_PopolaOds_StampaInSerie/Lettera.ott”
poi ho aperto una tabelle su Writer e in alto sono andato su strumenti → macro → esegui macro → macro personali standard → module1 → preparalettera → esegui
e compare la scritta errore di runtime basic di cui ti allego la foto più in basso.
poi ho aperto una tabelle su Writer e in alto sono andato su strumenti → macro → esegui macro → macro personali standard → module1 → preparalettera → esegui
e compare la scritta errore di runtime basic di cui ti allego la foto più in basso.
OpenOffice 4.1 su Windows 7 professional
Re: come estrarre dati da un foglio writer e inserirli autom
Attenzione. Quel percorso è riferito a dove si trova il file suo mio pc. Tu devi personalizzare là macro con il tuo percorso
Qualcosa del genere su pc Windows "file:///c:/users/tuonome/desktop/Lettera.ott"
Se si tratta del pc dell’ufficio probabilmente non devi mettere il tuo nome al posto di tuonome
Qualcosa del genere su pc Windows "file:///c:/users/tuonome/desktop/Lettera.ott"
Se si tratta del pc dell’ufficio probabilmente non devi mettere il tuo nome al posto di tuonome
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Re: come estrarre dati da un foglio writer e inserirli autom
Sei riuscito a far funzionare là macro?
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Re: come estrarre dati da un foglio writer e inserirli autom
Finalmente funziona! Grazie Unluky83! Però mi sono accorto che devo modificare un bel poco del testo fisso della lettera, ed in alto aggiungere il logo e l'intestazione della mia azienda. Come posso fare?
OpenOffice 4.1 su Windows 7 professional
Re: come estrarre dati da un foglio writer e inserirli autom
Sono contento che sei riuscito a farlo funzionare. Ti sarai accorto che aprendo il file Lettera.ott si apre sempre una copia chiamata "senza nome.odt", quindi sembra difficile modificare il modello, ma non è così. Segui questa procedura per modificare il mio file ott:
Apri writer>File>Modelli>Gestisci
Ti si apre una finestra di questo tipo: Ci sono le schede in alto per scegliere i tipi di modelli, dovrebbe aprirsi proprio su "Documenti". Clicca su "Personalizzati". Dovresti avere l'elenco vuoto come da immagine sopra.
A questo punto clicca sull'icona "Importa" che si trova sulla barra in alto della finestrella.
Naviga tra le tue directory e seleziona il file Lettera.ott.
Così facendo viene aggiunto questo modello tra le voci sottostanti.
Seleziona Lettera.ott, ora compare in alto l'icona "Modifica", come nell'immagine seguente A questo punto writer apre il file modello consentendoti di modificarlo.
In alternativa, se vuoi partire da zero prepara un documento nuovo e salvalo facendo: "File>Modelli>Salva come modello...". In tal caso ti ricordo i "tag" da inserire nella nuova lettera per far funzionare la macro:
{prot_nosto}
{destinatario}
{indirizzo}
{citta}
{pec}
{prot_suap}
{societa}
Quando la macro viene eseguita, questi campi contrassegnati dalle graffe, verranno sostituiti con i valori estratti dalla tabella.
Se hai problemi fai sapere. Se tutto fila liscio, possiamo procedere a migliorare la macro per estrapolare meglio il campo relativo alla pec.
Apri writer>File>Modelli>Gestisci
Ti si apre una finestra di questo tipo: Ci sono le schede in alto per scegliere i tipi di modelli, dovrebbe aprirsi proprio su "Documenti". Clicca su "Personalizzati". Dovresti avere l'elenco vuoto come da immagine sopra.
A questo punto clicca sull'icona "Importa" che si trova sulla barra in alto della finestrella.
Naviga tra le tue directory e seleziona il file Lettera.ott.
Così facendo viene aggiunto questo modello tra le voci sottostanti.
Seleziona Lettera.ott, ora compare in alto l'icona "Modifica", come nell'immagine seguente A questo punto writer apre il file modello consentendoti di modificarlo.
In alternativa, se vuoi partire da zero prepara un documento nuovo e salvalo facendo: "File>Modelli>Salva come modello...". In tal caso ti ricordo i "tag" da inserire nella nuova lettera per far funzionare la macro:
{prot_nosto}
{destinatario}
{indirizzo}
{citta}
{pec}
{prot_suap}
{societa}
Quando la macro viene eseguita, questi campi contrassegnati dalle graffe, verranno sostituiti con i valori estratti dalla tabella.
Se hai problemi fai sapere. Se tutto fila liscio, possiamo procedere a migliorare la macro per estrapolare meglio il campo relativo alla pec.
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Re: come estrarre dati da un foglio writer e inserirli autom
Alla fine ero riuscito a modificare il modello lettera.ott facendo le modifiche e mettendo poi salva e riscrivendo su salva il nome "lettera.ott" a questo punto compare una finestra che dice
"il file già esiste. sostituirlo?" io clicco su sì e quindi così l'ho modificato. ora mi serve un duplicato del modello su cui apportare altre modifiche che ho chiamato "Bis_lettera.ott" e ho salvato con nome nel desktop con questo nome "Bis_lettera.ott" cioè mi servono entrambi i modelli (con piccole varianti) da usare a volte l'uno a volte l'altro. Come avevo fatto per la macro che mi avevi inviato, l'ho rifatto per la copia della stessa macro: Ho aperto writer Strumenti>Macro>Organizza Macro>/openoffice basic si apre la finestra "macro personali", c'è già la voce standard --> module1 dove avevo messo la macro che mi avevi inviato che funziona. quindi ho creato una seconda voce che risulta Library1 --> module1 (di library1) e lì ho incollato la seconda copia della macro. HO SALVATO. Purtroppo non mi funziona(questa seconda macro): cioè quando apro su Writer la tabella da cui estrarre i dati e vado su strumenti --> macro --> esegui macro --> macro personali --> library1 --> module1 --> raccoglidatixlettera --> Alla fine ero riuscito a modificare il modello lettera.ott facendo le modifiche e mettendo poi salva e riscrivendo su salva il nome "lettera.ott" a questo punto compare una finestra che dice
"il file già esiste. sostituirlo?" io clicco su sì e quindi così l'ho modificato. ora mi serve un duplicato del modello su cui apportare altre modifiche che ho chiamato "Bis_lettera.ott" e ho salvato con nome nel desktop con questo nome "Bis_lettera.ott" cioè mi servono entrambi i modelli (con piccole varianti) da usare a volte l'uno a volte l'altro. Come avevo fatto per la macro che mi avevi inviato, l'ho rifatto per la copia della stessa macro: Ho aperto writer Strumenti>Macro>Organizza Macro>/openoffice basic si apre la finestra "macro personali", c'è già la voce standard --> module1 dove avevo messo la macro che mi avevi inviato che funziona. quindi ho creato una seconda voce che risulta Library1 --> module1 (di library1) e lì ho incollato la seconda copia della macro. HO SALVATO. Purtroppo non mi funziona(questa seconda macro): cioè quando apro su Writer la tabella da cui estrarre i dati e vado su strumenti --> macro --> esegui macro --> macro personali --> library1 --> module1 --> raccoglidatixlettera --> esegui compare la scritta "ERRORE DI SINTASSI BASIC". quindi COME FARE A COLLEGARE LA SECONDA MACRO ALLA LETTERA che ho denominato "bis_lettera.ott? e che ho salvato nel desktop?
"il file già esiste. sostituirlo?" io clicco su sì e quindi così l'ho modificato. ora mi serve un duplicato del modello su cui apportare altre modifiche che ho chiamato "Bis_lettera.ott" e ho salvato con nome nel desktop con questo nome "Bis_lettera.ott" cioè mi servono entrambi i modelli (con piccole varianti) da usare a volte l'uno a volte l'altro. Come avevo fatto per la macro che mi avevi inviato, l'ho rifatto per la copia della stessa macro: Ho aperto writer Strumenti>Macro>Organizza Macro>/openoffice basic si apre la finestra "macro personali", c'è già la voce standard --> module1 dove avevo messo la macro che mi avevi inviato che funziona. quindi ho creato una seconda voce che risulta Library1 --> module1 (di library1) e lì ho incollato la seconda copia della macro. HO SALVATO. Purtroppo non mi funziona(questa seconda macro): cioè quando apro su Writer la tabella da cui estrarre i dati e vado su strumenti --> macro --> esegui macro --> macro personali --> library1 --> module1 --> raccoglidatixlettera --> Alla fine ero riuscito a modificare il modello lettera.ott facendo le modifiche e mettendo poi salva e riscrivendo su salva il nome "lettera.ott" a questo punto compare una finestra che dice
"il file già esiste. sostituirlo?" io clicco su sì e quindi così l'ho modificato. ora mi serve un duplicato del modello su cui apportare altre modifiche che ho chiamato "Bis_lettera.ott" e ho salvato con nome nel desktop con questo nome "Bis_lettera.ott" cioè mi servono entrambi i modelli (con piccole varianti) da usare a volte l'uno a volte l'altro. Come avevo fatto per la macro che mi avevi inviato, l'ho rifatto per la copia della stessa macro: Ho aperto writer Strumenti>Macro>Organizza Macro>/openoffice basic si apre la finestra "macro personali", c'è già la voce standard --> module1 dove avevo messo la macro che mi avevi inviato che funziona. quindi ho creato una seconda voce che risulta Library1 --> module1 (di library1) e lì ho incollato la seconda copia della macro. HO SALVATO. Purtroppo non mi funziona(questa seconda macro): cioè quando apro su Writer la tabella da cui estrarre i dati e vado su strumenti --> macro --> esegui macro --> macro personali --> library1 --> module1 --> raccoglidatixlettera --> esegui compare la scritta "ERRORE DI SINTASSI BASIC". quindi COME FARE A COLLEGARE LA SECONDA MACRO ALLA LETTERA che ho denominato "bis_lettera.ott? e che ho salvato nel desktop?
OpenOffice 4.1 su Windows 7 professional
Re: come estrarre dati da un foglio writer e inserirli autom
Il tuo messaggio è un pò confuso perchè hai ripetuto del testo.
Mi pare di aver capito che dal file che chiamerò semplicemente "Tabella_tizio.odt" contenente la tabella, tu vuoi estrarre i dati per preparare o una lettera basata su "Lettera.ott" o un'altra lettera basata su "Bis_lettera.ott".
Tu hai già preparato il modello "Bis_lettera.ott", spero che in essa hai riportato i testi tra graffe che ho indicato nel precedente messaggio.
Quello che ti serve è una nuova macro che può essere salvata sempre nello stesso modulo in cui hai salvato le altre due:
Le macro da aggiungere possono essere le due precedenti "opportunamente" modificate:
Sottolineo le modifiche:
filename va sempre personalizzato mettendo il tuo reale percorso.
Detto ciò sei libero di salvare le macro in altra libreria e modulo come hai fatto già. Dato che ti da errore suppongo che o hai modificato male le macro oppure le hai incollate scordandoti di rimuove le due righe di codice
Mi pare di aver capito che dal file che chiamerò semplicemente "Tabella_tizio.odt" contenente la tabella, tu vuoi estrarre i dati per preparare o una lettera basata su "Lettera.ott" o un'altra lettera basata su "Bis_lettera.ott".
Tu hai già preparato il modello "Bis_lettera.ott", spero che in essa hai riportato i testi tra graffe che ho indicato nel precedente messaggio.
Quello che ti serve è una nuova macro che può essere salvata sempre nello stesso modulo in cui hai salvato le altre due:
Codice: Seleziona tutto
Sub RaccogliDatixLettera()
...
End Sub
Function PreparaLettera(Valori )
...
End Function
Codice: Seleziona tutto
Sub RaccogliDatixLettera_Bis()
Dim oDoc1 As Object
Dim oTable1 As Object
dim testo(6) As String
oDoc1=thiscomponent
oTable1=oDoc1.TextTables.getbyindex(0)
testo(0)=oTable1.getcellbyposition(1,0).String 'prot_suap
testo(1)=oTable1.getcellbyposition(1,1).String 'prot_nostro
testo(2)=oTable1.getcellbyposition(1,3).String 'destinatario
testo(3)=oTable1.getcellbyposition(1,7).String 'citta
testo(4)=oTable1.getcellbyposition(1,7).String 'indirizzo
testo(5)=oTable1.getcellbyposition(1,12).String 'pec
testo(6)=oTable1.getcellbyposition(1,6).String 'societa
'msgbox testo(1) & chr(13) & testo(2) & chr(13) & testo(3) & chr(13) & testo(4) & chr(13) & testo(5) & chr(13) & testo(6)
PreparaLettera_bis(testo)
End Sub
Function PreparaLettera_bis(Valori )
Dim args()
Dim campi(6) As string
Dim Replace As Object
filename="file:///c:/users/nomeUser/desktop/BisLettera.ott"
campi=Array("{prot_suap}","{prot_nosto}","{destinatario}","{citta}","{indirizzo}","{pec}","{societa}")
oDoc2 = StarDesktop.loadComponentFromURL (filename, "_blank",0,args() )
Replace = oDoc2.createReplaceDescriptor
For I = 0 To 6
Replace.SearchString = campi(I)
Replace.ReplaceString = Valori(I)
oDoc2.replaceAll(Replace)
Next I
End Function
Codice: Seleziona tutto
Sub RaccogliDatixLettera_Bis()
...
PreparaLettera_bis(testo)
End Sub
Function PreparaLettera_bis(Valori )
...
filename="file:///c:/users/nomeUser/desktop/Bis_lettera.ott"
...
End Function
Detto ciò sei libero di salvare le macro in altra libreria e modulo come hai fatto già. Dato che ti da errore suppongo che o hai modificato male le macro oppure le hai incollate scordandoti di rimuove le due righe di codice
Codice: Seleziona tutto
sub main
end sub
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Re: come estrarre dati da un foglio writer e inserirli autom
Ho risolto: ho personalizzato la macro e funziona perfettamente. Grazie a tutti e in particolare a unlucky83. non so dove scrivere "Risolto".
OpenOffice 4.1 su Windows 7 professional
Re: come estrarre dati da un foglio writer e inserirli autom
Bene
[Risolto] va messo nel titolo del primo messaggio con cui hai aperto la discussione, con tanto di spunta verde.
[Risolto] va messo nel titolo del primo messaggio con cui hai aperto la discussione, con tanto di spunta verde.
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui