Trova e sostituisci

Creare una macro - Scrivere uno script - Usare le API
cater58
Messaggi: 54
Iscritto il: lunedì 11 settembre 2017, 15:29

Trova e sostituisci

Messaggio da cater58 »

Sicuramente qualcosa in giro c'e' ... ma non riesco a trovarlo
mi serve una macro che molto semplicemente all'interno di un db csv mi trovi un valore alfanumerico e le lo cambi con un altro

esempi voglio cambiare tutti i "(2)" presenti nel database csv con "(B) " ... considerando che tale valore è CONTENUTO nellle celle e non è il loro ESATTO VALORE

esempio
IN TUTTE LE CELLE DEL DATABASE
se si trova una cella con valore "Antonio (2)" ... deve divenire "Antonio (B)"

potete darmi la stringa da inserire nel for next?
Gianni
Ultima modifica di charlie il giovedì 16 gennaio 2020, 11:15, modificato 2 volte in totale.
Motivazione: Cancellato [Risolto], la discussione è stata riaperta.
Libreoffice 2.2.3 con MacOS 10.4
patel
Volontario attivo
Volontario attivo
Messaggi: 4016
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: trova e sostituisci

Messaggio da patel »

Vuoi trattare il file csv come un file di testo oppure lo apri con Calc e poi lo salvi in csv ? nel secondo caso potresti provare questa macro

Codice: Seleziona tutto

Sub replacestring
Dim Doc As Object, Sheet As Object, sostituisci As Object
Doc = ThisComponent
Sheet = Doc.Sheets(0)
sostituisci = Sheet.createReplaceDescriptor()
sostituisci.SearchString = "(2)"
sostituisci.ReplaceString = "(B)"
Sheet.ReplaceAll(sostituisci) 
end sub
altrimenti allega un csv di esempio
Ultima modifica di patel il giovedì 3 maggio 2018, 8:49, modificato 1 volta in totale.
-------------------
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
cater58
Messaggi: 54
Iscritto il: lunedì 11 settembre 2017, 15:29

Re: trova e sostituisci

Messaggio da cater58 »

Innanzitutto grazie e ciao Patel

il file csv lo tratto come database

ti spiego meglio... io devo cambiare cosi come (2) in (B) , anche (3) in (C) .. e avanti cosi

quindi di fatto a me serve:

1) dentro un ciclo for next che ho gia correttamente impostato e che parte dalla ultima riga fino alla prima
2) per ogni riga
3) se trova (2) lo deve cambiare in (B) ... se trova (3) lo deve cambiare in (C) ... e avanti cosi ... seguendo una tabella di valori che ho io

Ora , per non complicarmi la vita, supponevo che se mi fosse stato detto come trasformare il (2) in (B) ... avrei io poi copiato i comandi le per le altre sostituzioni ... non so se è chiaro...

se puoi aiutarmi te ne sarei grato, io ho realizzato una cosa che funziona ma solo per i valori assoluti contenuti nelle celle, e non per porzioni di questi valori come a me serve

Ciao

Gianni
Libreoffice 2.2.3 con MacOS 10.4
patel
Volontario attivo
Volontario attivo
Messaggi: 4016
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: trova e sostituisci

Messaggio da patel »

cater58 ha scritto: il file csv lo tratto come database
non so cosa significhi, lo apri con Base ? in questo caso non posso aiutarti
-------------------
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
cater58
Messaggi: 54
Iscritto il: lunedì 11 settembre 2017, 15:29

Re: trova e sostituisci

Messaggio da cater58 »

non mi sono spiegato, certo che puoi .. allego il file di prova (tra l'altro proprio tu mi hai aiutato la scorsa volta sullo stesso file)

la macro è il modulo tre (la prima e la seconda le hai fatta tu)

io ho programmato allinizio la cancellazione di alcune colonne
successivamente c'e' il ciclo for next che mi serve e che al momento non fa cio che chiedo...ma identifica e sostituisce solo i valori assoluti dei campi

A ME INVECE SERVE per farti un esempio
- alla riga 10 colonna B c'e' Richard Tucker (2) ... mi deve divetare Richard Tucker (B)
- alla riga 51 colonna D c'e' ABC Classic (2) mi deve diventare ABC Classic (B)

poi... come ti ho detto (2) in (B) non è la unica variazione che mi serve ... poi saro' io a copiare le tue istruzioni variandole a mio uso ... (3) in (C) - (4) in (D) ecc ecc seguendo una tabella cha arriva a 100 ... certo sarebbe topico questa potesse essere usata in automatico...

Fammi sapere e grazie in anticipo per la tua disponibilità
Gianni
Allegati
TUTTO.csv
(35.47 KiB) Scaricato 167 volte
Libreoffice 2.2.3 con MacOS 10.4
patel
Volontario attivo
Volontario attivo
Messaggi: 4016
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: trova e sostituisci

Messaggio da patel »

cater58 ha scritto:allego il file di prova (tra l'altro proprio tu mi hai aiutato la scorsa volta sullo stesso file)
la macro è il modulo tre (la prima e la seconda le hai fatta tu)
non hai allegato il file,Un file csv è un file di testo quindi non può contenere macro.
Se non rispondi mai alle mie domande non si va avanti, hai provato la macro che ti ho suggerito ?
-------------------
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
cater58
Messaggi: 54
Iscritto il: lunedì 11 settembre 2017, 15:29

Re: trova e sostituisci

Messaggio da cater58 »

Ciao patel ... io il file lo vedo e lo ho pure riaperto dalla mesaggeria non so perche dici che non ho allegato nessun file
dammi un modo per inviartelo anche in privato...
si è un csv che apro con openoffice calc (non con database avevo sbagliato)
come ho detto gia contiene due macro che hai fatto tu, la terza è il mio tentativo di realizzare cio che mi serve ora
non ho provato la macro ... perchè non so come fare ad aggiungerla nel ciclo ... e piu che altro non so dove mettere le successive variazioni da 2/b 3/c ecc ecc
Libreoffice 2.2.3 con MacOS 10.4
patel
Volontario attivo
Volontario attivo
Messaggi: 4016
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: trova e sostituisci

Messaggio da patel »

Ti ripeto, il file csv è un file di testo e non può contenere macro, documentati con google.
La mia macro non devi aggiungerla ad un ciclo, la devi provare da sola.
Forse tu le vedi le macro perché le hai messe in Macro personali invece che nel file ods, ma le vedi solo tu nel tuo pc.
-------------------
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
cater58
Messaggi: 54
Iscritto il: lunedì 11 settembre 2017, 15:29

Re: trova e sostituisci

Messaggio da cater58 »

Codice: Seleziona tutto


Sub perdiskaos

doc=thiscomponent
Sh1 = Doc.Sheets(0)
c = Sh1.createCursor
c.gotoEndOfUsedArea(false)

Rem ----- Trova ultima riga dati utili nel foglio di lavoro -----
UltimaRiga = c.RangeAddress.EndRow

REM ----- Rimozione delle colonne che inizialmente non servono -----
Sh1.Columns.removeByIndex(0,1)
Sh1.Columns.removeByIndex(5,2)
Sh1.Columns.removeByIndex(6,1)
Sh1.Columns.removeByIndex(9,6)

Rem ----- Trova ultima riga dati utili nel foglio di lavoro -----
UltimaRiga = c.RangeAddress.EndRow

Rem ----- Avvio loop per la variazione dei codici  -----
For Riga = UltimaRiga To 2 Step -1
	If Sh1.getCellByPosition(0, Riga).string="Mannheim Steamroller" then Sh1.getCellByPosition(0, Riga).string="(B)"
	Next
End sub

Libreoffice 2.2.3 con MacOS 10.4
cater58
Messaggi: 54
Iscritto il: lunedì 11 settembre 2017, 15:29

Re: trova e sostituisci

Messaggio da cater58 »

Ciao Patel
questa è la procedura dove si cancellano colonne nella prima parte, e dove cerco di fare la sostituzione che ti ho spiegato nella seconda
(essedo una prova qui provo a sostituire non "(2)" ma Manheim Steamroller" con "(B)" ... il concetto non cambia...)

La variazione che mi interessa e che ho spiegato dovrebbe stare dentro il ciclo for next.

Rem ----- Avvio loop per la variazione dei codici -----
For Riga = UltimaRiga To 2 Step -1
If Sh1.getCellByPosition(0, Riga).string="Mannheim Steamroller" then Sh1.getCellByPosition(0, Riga).string="(B)"
Next

Per quello che riguarda office e csv testo, non so come spiegarti ma aprendo il csv del formato del mio, mi viene chiesto se importarlo in oo calc , selezionando il divisore (nel mio caso ;
poi tutto funziona come calc, ma il formato rimane csv - devo usare questo formato per caricare nelle pagine we, ed è l'unico usabile

Sper di aver apiegato come mai posso usare un csv , ma non è questo il problema ... se mi aiuti ad inserire la variazione che mi serve, io sono a posto

Grazie ancora
Gianni
Libreoffice 2.2.3 con MacOS 10.4
patel
Volontario attivo
Volontario attivo
Messaggi: 4016
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: trova e sostituisci

Messaggio da patel »

Non c'è bisogno di un ciclo for next

Codice: Seleziona tutto

Sub perdiskaos
doc=thiscomponent
Sh1 = Doc.Sheets(0)
c = Sh1.createCursor
c.gotoEndOfUsedArea(false)

Rem ----- Trova ultima riga dati utili nel foglio di lavoro -----
UltimaRiga = c.RangeAddress.EndRow

REM ----- Rimozione delle colonne che inizialmente non servono -----
Sh1.Columns.removeByIndex(0,1)
Sh1.Columns.removeByIndex(5,2)
Sh1.Columns.removeByIndex(6,1)
Sh1.Columns.removeByIndex(9,6)

Rem ----- Trova ultima riga dati utili nel foglio di lavoro -----
UltimaRiga = c.RangeAddress.EndRow

Rem ----- Avvio  variazione dei codici  -----
Dim  sostituisci As Object
sostituisci = Sh1.createReplaceDescriptor()
sostituisci.SearchString = "(2)"
sostituisci.ReplaceString = "(B)"
Sh1.ReplaceAll(sostituisci) 
End sub
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
cater58
Messaggi: 54
Iscritto il: lunedì 11 settembre 2017, 15:29

Re: trova e sostituisci

Messaggio da cater58 »

quindi devo aggiungere :

Codice: Seleziona tutto

sostituisci.SearchString = "(2)"
sostituisci.ReplaceString = "(B)"
sostituisci.SearchString = "(3)"
sostituisci.ReplaceString = "(C)"
sostituisci.SearchString = "(4)"
sostituisci.ReplaceString = "(d)"
....

e avanti cosi?
Libreoffice 2.2.3 con MacOS 10.4
patel
Volontario attivo
Volontario attivo
Messaggi: 4016
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: trova e sostituisci

Messaggio da patel »

tutto dipende da quali sono i numeri da sostituire, se sono da 1 a 5 puoi fare così, se sono da 1 a 25 conviene mettere le lettere in un array e fare un ciclo.
Devi deciderti a spiegare tutto
Ultima modifica di patel il venerdì 4 maggio 2018, 19:03, modificato 1 volta in totale.
-------------------
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
cater58
Messaggi: 54
Iscritto il: lunedì 11 settembre 2017, 15:29

Re: trova e sostituisci

Messaggio da cater58 »

no i numeri sono da 2 a 100 seguendo una tabella che ho io
se mi puoi aiutare , te la invio .. in che formato ti serve?
Gianni
Libreoffice 2.2.3 con MacOS 10.4
patel
Volontario attivo
Volontario attivo
Messaggi: 4016
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: trova e sostituisci

Messaggio da patel »

formato ods, quale lettera metti al posto del numero 100 ?
-------------------
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
cater58
Messaggi: 54
Iscritto il: lunedì 11 settembre 2017, 15:29

Re: trova e sostituisci

Messaggio da cater58 »

ti invio il file ... i valori hanno un senso assegnato da me (oltre il numero delle lettere dell'alfabeto assegno valori particolari)
comunque ok , va bene anche appena puoi.
intanto ti invio il file
immensamente grazie
Gianni
Libreoffice 2.2.3 con MacOS 10.4
patel
Volontario attivo
Volontario attivo
Messaggi: 4016
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: trova e sostituisci

Messaggio da patel »

non vedo file allegati, ma la mia sub funziona ? non l'hai ancora detto
-------------------
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
cater58
Messaggi: 54
Iscritto il: lunedì 11 settembre 2017, 15:29

Re: trova e sostituisci

Messaggio da cater58 »

questa macro qui si funziona per (2) >> (B)

Codice: Seleziona tutto

Sub perdiskaos
doc=thiscomponent
Sh1 = Doc.Sheets(0)
c = Sh1.createCursor
c.gotoEndOfUsedArea(false)

Rem ----- Trova ultima riga dati utili nel foglio di lavoro -----
UltimaRiga = c.RangeAddress.EndRow

REM ----- Rimozione delle colonne che inizialmente non servono -----
Sh1.Columns.removeByIndex(0,1)
Sh1.Columns.removeByIndex(5,2)
Sh1.Columns.removeByIndex(6,1)
Sh1.Columns.removeByIndex(9,6)

Rem ----- Trova ultima riga dati utili nel foglio di lavoro -----
UltimaRiga = c.RangeAddress.EndRow

Rem ----- Avvio  variazione dei codici  -----
Dim  sostituisci As Object
sostituisci = Sh1.createReplaceDescriptor()
sostituisci.SearchString = "(2)"
sostituisci.ReplaceString = "(B)"
Sh1.ReplaceAll(sostituisci) 
End sub
Libreoffice 2.2.3 con MacOS 10.4
cater58
Messaggi: 54
Iscritto il: lunedì 11 settembre 2017, 15:29

Re: trova e sostituisci

Messaggio da cater58 »

Allego la tabella di riferimento
essendo comunque una impostazione per la quale non dovrebbero esserci differenze per te, mi sono permesso di arrivare fino a 200, poi fammi sapere..
Grazie mille per tutto cio che farai
Gianni
Allegati
tabellacodici.odt
(10.45 KiB) Scaricato 117 volte
Libreoffice 2.2.3 con MacOS 10.4
cater58
Messaggi: 54
Iscritto il: lunedì 11 settembre 2017, 15:29

Re: trova e sostituisci

Messaggio da cater58 »

SCUSA ERA ODT NON ODS
allego ods
Allegati
tabellacodici.ods
(10.44 KiB) Scaricato 139 volte
Libreoffice 2.2.3 con MacOS 10.4
patel
Volontario attivo
Volontario attivo
Messaggi: 4016
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: trova e sostituisci

Messaggio da patel »

prova questa macro da inserire nel file dei codici, vedi immagine allegata, come puoi vedere prima carica il file csv e poi lo modifica

Codice: Seleziona tutto

Sub perdiskaos
doc=thiscomponent
Sh1 = Doc.Sheets(0)
Fname = "F:\Download\tutto.csv" ' percorso da modificare
UrlDelFile = ConvertToURL(Fname)
DocCsv = StarDesktop.loadComponentFromURL(UrlDelFile, "_blank", 0, Array())
Sh2 = DocCsv.Sheets(0)
REM ----- Rimozione delle colonne che inizialmente non servono -----
Sh2.Columns.removeByIndex(0,1)
Sh2.Columns.removeByIndex(5,2)
Sh2.Columns.removeByIndex(6,1)
Sh2.Columns.removeByIndex(9,6)
Rem ----- Avvio  variazione dei codici  -----
Dim  sostituisci As Object
sostituisci = Sh2.createReplaceDescriptor()
for r = 0 to 198
  sorig = Sh1.GetCellByPosition(0,r).String
  sfin = Sh1.GetCellByPosition(1,r).String  
  sostituisci.SearchString = sorig
  sostituisci.ReplaceString = sfin
  Sh2.ReplaceAll(sostituisci)
next
End sub
Allegati
Cattura.JPG
-------------------
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
cater58
Messaggi: 54
Iscritto il: lunedì 11 settembre 2017, 15:29

Re: trova e sostituisci

Messaggio da cater58 »

non mi è chiaro a quali file si riferiscono questi url scusa ...

fname = ad esempio c:tutto.csv , ok

le altre due righe a che file si riferiscono e di preciso cosa dovrei cambiare?

Codice: Seleziona tutto


Fname = "F:\Download\tutto.csv" ' percorso da modificare
UrlDelFile = ConvertToURL(Fname)
DocCsv = StarDesktop.loadComponentFromURL(UrlDelFile, "_blank", 0, Array())

Libreoffice 2.2.3 con MacOS 10.4
cater58
Messaggi: 54
Iscritto il: lunedì 11 settembre 2017, 15:29

Re: trova e sostituisci

Messaggio da cater58 »

Codice: Seleziona tutto


Sub perdiskaos

doc=thiscomponent
Sh1 = Doc.Sheets(0)
Fname ="C:\Users\pc\Desktop\tutto.csv" ' percorso da modificare
UrlDelFile = ConvertToURL(Fname)
DocCsv = StarDesktop.loadComponentFromURL(UrlDelFile, "_blank", 0, Array())
Sh2 = DocCsv.Sheets(0)

REM ----- Rimozione delle colonne che inizialmente non servono -----
Sh2.Columns.removeByIndex(0,1)
Sh2.Columns.removeByIndex(5,2)
Sh2.Columns.removeByIndex(6,1)
Sh2.Columns.removeByIndex(9,6)

Rem ----- Avvio  variazione dei codici  -----
Dim  sostituisci As Object
sostituisci = Sh2.createReplaceDescriptor()
for r = 0 to 198
  sorig = Sh1.GetCellByPosition(0,r).String
  sfin = Sh1.GetCellByPosition(1,r).String  
  sostituisci.SearchString = sorig
  sostituisci.ReplaceString = sfin
  Sh2.ReplaceAll(sostituisci)
next

End sub

mi si ferma qui
Sh2.Columns.removeByIndex(0,1)
dicendo errore runtime basic
Libreoffice 2.2.3 con MacOS 10.4
cater58
Messaggi: 54
Iscritto il: lunedì 11 settembre 2017, 15:29

Re: trova e sostituisci

Messaggio da cater58 »

è perche lo apre in sola lettura, quindi appena cerchi di cancellare la prima colonna si ferma
Libreoffice 2.2.3 con MacOS 10.4
patel
Volontario attivo
Volontario attivo
Messaggi: 4016
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: trova e sostituisci

Messaggio da patel »

non so risponderti, a me funziona col file che hai allegato, magari il tuo è protetto oppure già aperto da altra applicazione, tu devi aprire soltanto il file con i codici, non anche il csv prima di lanciare la macro.
-------------------
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
cater58
Messaggi: 54
Iscritto il: lunedì 11 settembre 2017, 15:29

Re: trova e sostituisci

Messaggio da cater58 »

?? e come si fa? :-)
Libreoffice 2.2.3 con MacOS 10.4
patel
Volontario attivo
Volontario attivo
Messaggi: 4016
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: trova e sostituisci

Messaggio da patel »

descrivi una per una le operazioni che fai
-------------------
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
cater58
Messaggi: 54
Iscritto il: lunedì 11 settembre 2017, 15:29

Re: trova e sostituisci

Messaggio da cater58 »

1) apri il file che ti ho allegato
2) lo apro come calc con divisore dei campi virgola
3) strumenti - macro - organizza macro - Openoffice basic
4) standard - module 2 - perdiskaos - esegui

da
Errore di runtime basic
Si è verificata una eccezione
Type:com.sun.star.uno.Runtimexception
Message:.

alla riga

Sh2.Columns.removeByIndex(0,1)
Allegati
TUTTO.csv
(35.11 KiB) Scaricato 137 volte
Libreoffice 2.2.3 con MacOS 10.4
patel
Volontario attivo
Volontario attivo
Messaggi: 4016
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: trova e sostituisci

Messaggio da patel »

le operazioni da fare sono
1) assolutamente NON aprire il file csv
2) aprire il file con i codici (la macro deve essere inserita come già descritto e salvata)
3) lanciare la macro

come già detto ci pensa la macro ad aprire il file csv, se lo apri tu manualmente nasce l'errore.
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
cater58
Messaggi: 54
Iscritto il: lunedì 11 settembre 2017, 15:29

Re: trova e sostituisci

Messaggio da cater58 »

aaah ecccoooo

questa macro parte dal file con i codici non dal file tutto.csv - ci potevo anche pensare ma mi ero ormai fissato sul file csv.

grazieeeeee sei gentilissimo!!

gianni
Libreoffice 2.2.3 con MacOS 10.4
Rispondi