come estrarre dati da un foglio writer e inserirli automatic

Discussioni sull'applicazione di videoscrittura
Rispondi
gio1234
Messaggi: 15
Iscritto il: mercoledì 24 ottobre 2018, 13:31

come estrarre dati da un foglio writer e inserirli automatic

Messaggio da gio1234 »

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?
OpenOffice 4.1 su Windows 7 professional
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: come estrarre dati da un foglio writer e inserirli autom

Messaggio da unlucky83 »

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
gio1234
Messaggi: 15
Iscritto il: mercoledì 24 ottobre 2018, 13:31

Re: come estrarre dati da un foglio writer e inserirli autom

Messaggio da gio1234 »

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
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: come estrarre dati da un foglio writer e inserirli autom

Messaggio da unlucky83 »

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
gio1234
Messaggi: 15
Iscritto il: mercoledì 24 ottobre 2018, 13:31

Re: come estrarre dati da un foglio writer e inserirli autom

Messaggio da gio1234 »

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.
OpenOffice 4.1 su Windows 7 professional
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: come estrarre dati da un foglio writer e inserirli autom

Messaggio da unlucky83 »

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.

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
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. :roll:
Faccio presente che non mi è possibile usare calc
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.
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
gio1234
Messaggi: 15
Iscritto il: mercoledì 24 ottobre 2018, 13:31

Re: come estrarre dati da un foglio writer e inserirli autom

Messaggio da gio1234 »

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
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: come estrarre dati da un foglio writer e inserirli autom

Messaggio da unlucky83 »

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
Schermata del 2018-10-26 15-27-23.png
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:
Schermata del 2018-10-26 15-36-03.png
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
gio1234
Messaggi: 15
Iscritto il: mercoledì 24 ottobre 2018, 13:31

Re: come estrarre dati da un foglio writer e inserirli autom

Messaggio da gio1234 »

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
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: come estrarre dati da un foglio writer e inserirli autom

Messaggio da unlucky83 »

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
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: come estrarre dati da un foglio writer e inserirli autom

Messaggio da unlucky83 »

In questo allegato ho salvato le macro
dati da tabella con macro.odt
(17.22 KiB) Scaricato 169 volte
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
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
Lettera.ott
(16.12 KiB) Scaricato 166 volte
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:

Codice: Seleziona tutto

filename="file:///home/andrea/Scrivania/EstraiDati_PopolaOds_StampaInSerie/Lettera.ott" 'sistema linux
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.
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
gio1234
Messaggi: 15
Iscritto il: mercoledì 24 ottobre 2018, 13:31

Re: come estrarre dati da un foglio writer e inserirli autom

Messaggio da gio1234 »

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
OpenOffice 4.1 su Windows 7 professional
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: come estrarre dati da un foglio writer e inserirli autom

Messaggio da unlucky83 »

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
Schermata del 2018-10-29 09-47-17.png
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
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.
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
gio1234
Messaggi: 15
Iscritto il: mercoledì 24 ottobre 2018, 13:31

Re: come estrarre dati da un foglio writer e inserirli autom

Messaggio da gio1234 »

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
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: come estrarre dati da un foglio writer e inserirli autom

Messaggio da unlucky83 »

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
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: come estrarre dati da un foglio writer e inserirli autom

Messaggio da unlucky83 »

gio1234 ha scritto:per adesso l'ho salvata nel desktop. l'ho aperto dopo aver aperto la lettera da scrivere, ma come si attiva?
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.
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
gio1234
Messaggi: 15
Iscritto il: mercoledì 24 ottobre 2018, 13:31

Re: come estrarre dati da un foglio writer e inserirli autom

Messaggio da gio1234 »

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.
OpenOffice 4.1 su Windows 7 professional
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: come estrarre dati da un foglio writer e inserirli autom

Messaggio da unlucky83 »

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
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
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: come estrarre dati da un foglio writer e inserirli autom

Messaggio da unlucky83 »

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
gio1234
Messaggi: 15
Iscritto il: mercoledì 24 ottobre 2018, 13:31

Re: come estrarre dati da un foglio writer e inserirli autom

Messaggio da gio1234 »

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
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: come estrarre dati da un foglio writer e inserirli autom

Messaggio da unlucky83 »

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:
Schermata del 2018-10-30 23-32-54.png
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
Schermata del 2018-10-30 23-37-44.png
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
gio1234
Messaggi: 15
Iscritto il: mercoledì 24 ottobre 2018, 13:31

Re: come estrarre dati da un foglio writer e inserirli autom

Messaggio da gio1234 »

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?
OpenOffice 4.1 su Windows 7 professional
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: come estrarre dati da un foglio writer e inserirli autom

Messaggio da unlucky83 »

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:

Codice: Seleziona tutto

Sub RaccogliDatixLettera()
    ...
    End Sub
   
    Function PreparaLettera(Valori )
...
   End Function
Le macro da aggiungere possono essere le due precedenti "opportunamente" modificate:

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
Sottolineo le modifiche:

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
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

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
gio1234
Messaggi: 15
Iscritto il: mercoledì 24 ottobre 2018, 13:31

Re: come estrarre dati da un foglio writer e inserirli autom

Messaggio da gio1234 »

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
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: come estrarre dati da un foglio writer e inserirli autom

Messaggio da unlucky83 »

Bene :D
[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
Rispondi