Pagina 1 di 2
Trova e sostituisci
Inviato: mercoledì 2 maggio 2018, 19:38
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
Re: trova e sostituisci
Inviato: mercoledì 2 maggio 2018, 20:11
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
Re: trova e sostituisci
Inviato: mercoledì 2 maggio 2018, 20:37
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
Re: trova e sostituisci
Inviato: giovedì 3 maggio 2018, 8:42
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
Re: trova e sostituisci
Inviato: giovedì 3 maggio 2018, 11:27
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
Re: trova e sostituisci
Inviato: giovedì 3 maggio 2018, 12:42
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 ?
Re: trova e sostituisci
Inviato: giovedì 3 maggio 2018, 13:27
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
Re: trova e sostituisci
Inviato: giovedì 3 maggio 2018, 18:06
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.
Re: trova e sostituisci
Inviato: venerdì 4 maggio 2018, 16:16
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
Re: trova e sostituisci
Inviato: venerdì 4 maggio 2018, 16:26
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
Re: trova e sostituisci
Inviato: venerdì 4 maggio 2018, 17:13
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
Re: trova e sostituisci
Inviato: venerdì 4 maggio 2018, 17:21
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?
Re: trova e sostituisci
Inviato: venerdì 4 maggio 2018, 18:57
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
Re: trova e sostituisci
Inviato: venerdì 4 maggio 2018, 19:02
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
Re: trova e sostituisci
Inviato: venerdì 4 maggio 2018, 19:04
da patel
formato ods, quale lettera metti al posto del numero 100 ?
Re: trova e sostituisci
Inviato: venerdì 4 maggio 2018, 19:42
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
Re: trova e sostituisci
Inviato: venerdì 4 maggio 2018, 20:07
da patel
non vedo file allegati, ma la mia sub funziona ? non l'hai ancora detto
Re: trova e sostituisci
Inviato: sabato 5 maggio 2018, 11:12
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
Re: trova e sostituisci
Inviato: sabato 5 maggio 2018, 11:14
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
Re: trova e sostituisci
Inviato: sabato 5 maggio 2018, 11:37
da cater58
SCUSA ERA ODT NON ODS
allego ods
Re: trova e sostituisci
Inviato: sabato 5 maggio 2018, 16:14
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
Re: trova e sostituisci
Inviato: sabato 5 maggio 2018, 17:16
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())
Re: trova e sostituisci
Inviato: sabato 5 maggio 2018, 17:50
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
Re: trova e sostituisci
Inviato: sabato 5 maggio 2018, 18:08
da cater58
è perche lo apre in sola lettura, quindi appena cerchi di cancellare la prima colonna si ferma
Re: trova e sostituisci
Inviato: sabato 5 maggio 2018, 19:08
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.
Re: trova e sostituisci
Inviato: domenica 6 maggio 2018, 2:50
da cater58
?? e come si fa?
Re: trova e sostituisci
Inviato: domenica 6 maggio 2018, 8:03
da patel
descrivi una per una le operazioni che fai
Re: trova e sostituisci
Inviato: domenica 6 maggio 2018, 18:10
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)
Re: trova e sostituisci
Inviato: lunedì 7 maggio 2018, 8:46
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.
Re: trova e sostituisci
Inviato: lunedì 7 maggio 2018, 10:13
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