Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

[Excel] Import csv file-ova pomocu makroa

[es] :: Office :: Excel :: [Excel] Import csv file-ova pomocu makroa

[ Pregleda: 5862 | Odgovora: 16 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mixi
Milan Stojkovic
Miljakovac, Beograd

Član broj: 3433
Poruke: 47
*.ADSL.neobee.net.



Profil

icon [Excel] Import csv file-ova pomocu makroa16.08.2007. u 22:11 - pre 201 meseci
Imam svakodnevnu rutinu importovanja podataka iz par desetina csv fileove u excel tabelu, sto moze da bude veoma naporno i dugotrajno. Kako bi trebalo da izgleda makro koji bi mi skratio muke.

Dakle broj file-ova nije konstantan, tako da bi makro trebalo da uvuce sve file-ove iz odredjenog foldera. Broj kolona u svakom csv file-u je konstantan (12), ali broj redova nije, negde ima 4 reda, a negde npr 158 isl.
Ime csv file-a je npr: kumulativno_200708162315.csv, kumulativno_200708162318.csv itd, znaci ime file zavisi od datuma i vremena kada je izbacen na server.

Delimiter u csv-u je "|".

Da li mi ima ikakve pomoci?


Hvala unapred.
 
Odgovor na temu

maricab
Marica Blecic
Brno, CZ

Član broj: 153136
Poruke: 17
*.karneval.cz.

Sajt: www.marica.org


Profil

icon Re: [Excel] Import csv file-ova pomocu makroa17.08.2007. u 05:48 - pre 201 meseci
Ja sam u skorije vreme pravila macro za istu stvar...

Otprilike taj macro radi sledece:
1. Nalazi csv fajlove u folderu (u tvom slucaju trazio bi kumulativno_*)
2. Otvori .csv file, proveri u kom obliku su podaci i formatira ih (razdvoji po kolonama, prebaci u brojeve)
3. Kopira kolone u zeljeni file

-za ovo prvo ti treba nesto kao:

With Application.FileSearch
.NewSearch
.LookIn = Ime foldera
.Filename = "kumulativno_*" & ".csv"
.SearchSubFolders = False
.FileType = msoFileTypeExcelWorkbooks

If .Execute() > 0 Then
......neka radnja.....
End If
End With

- za drugo:

Range("colona u kojoj su podaci - npr a:a").Select
Selection.TextToColumns Destination:=ActiveCell, Other:=True, OtherChar:="|"

- za trece:

neka petlja koja ce da kopira, pomeri se za 12 colona i tako u krug dok ne izvrti sve fajlove.

Nije mi problem da ti to sve slozim u jedno, ako nisi bas iskusan a macroima ali predvece, posto sada zurim na posao ;)

 
Odgovor na temu

mixi
Milan Stojkovic
Miljakovac, Beograd

Član broj: 3433
Poruke: 47
*.eunet.yu.



Profil

icon Re: [Excel] Import csv file-ova pomocu makroa17.08.2007. u 07:50 - pre 201 meseci
Kada citam tvoje resenje sve mi je jasno, ali da ga sam napisem, tesko. Bio bih ti zahvalan ako bi mi pomogla do kraja, a ja cu vec pokusati sa ovim da se igram, pa da vidim da li mogu nesto i sam da uradim.

Hvala.
 
Odgovor na temu

maricab
Marica Blecic
Brno, CZ

Član broj: 153136
Poruke: 17
*.karneval.cz.

Sajt: www.marica.org


Profil

icon Re: [Excel] Import csv file-ova pomocu makroa17.08.2007. u 20:21 - pre 201 meseci
Ovo bi trebalo da bude to sto ti treba.
Sve sto treba da uradis je da Otvoris novi workbook, kreiras novi modul (tools ->macro ->visual basic editor ->insert ->modul)
Kopiras ovo od dole i sacuvas taj workbook npr. temp_copy
Svaki put kada zelis da koristis ovaj macro, kopiraj temp_copy.xls u taj folder gde su ti kumulativno_*.csv, otvori temp_copy i startuj macro.


Sub CopyData()

Dim Bazna As Workbook 'Workbook u kojem je macro'
Dim Otvorena As Workbook 'Workbook npr. kumulativno_123.csv'
Dim i As Long
Dim BrRedova As Integer
Dim Putanja As String 'Putanja foldera u kojem se nalaze csv file-ovi'

Putanja = ThisWorkbook.Path

Application.ScreenUpdating = False 'Da ti ne prikazuje kako otvara csv'
Application.DisplayAlerts = False

With Application.FileSearch
.NewSearch
.LookIn = Putanja
.Filename = "kumulativno_*" & ".csv"
.SearchSubFolders = False 'pretpostavljam da nema podfoldera'
.FileType = msoFileTypeExcelWorkbooks

If .Execute() > 0 Then
Set Bazna = ThisWorkbook

For i = 1 To .FoundFiles.Count
Set Otvorena = Workbooks.Open(.FoundFiles(i))
BrRedova = ActiveSheet.UsedRange.Rows.Count
Otvorena.Worksheets(1).Range("a:a").Select 'pretpostavljam da su podaci u csv u koloni A'
Selection.TextToColumns Destination:=ActiveCell, Other:=True, OtherChar:="|"
Otvorena.Worksheets(1).Range(Cells(1, 1), Cells(BrRedova, 12)).Select
Selection.Copy 'kopira 12 kolona'
Bazna.Activate
Bazna.Sheets(1).Cells(1, 1 + 12 * (i - 1)).Select
ActiveCell.PasteSpecial
Otvorena.Close savechanges:=False 'imaces csv sacuvane u orginalu, nepromenjene'
Next i
End If
End With

Application.DisplayAlerts = True
Application.ScreenUpdating = True
MsgBox "--- Gotovo ---" 'ona kraju procesa izbacice ti prozor sa porukom --- Gotovo ---'

End Sub

Eto to je to, pa javi da li radi ;)
 
Odgovor na temu

mixi
Milan Stojkovic
Miljakovac, Beograd

Član broj: 3433
Poruke: 47
213.244.209.*



Profil

icon Re: [Excel] Import csv file-ova pomocu makroa19.08.2007. u 23:42 - pre 201 meseci
Skoro, odlicno je, samo sto se po ovom kodu podaci drugog csv-a posle prvog nastavljaju upisivati vodoravno, a ne uspravno.
Kako da stavim da se npr. ako prvi csv ima 23 reda sledeci csv pocne upisivati od A24, a ne od M1, ako me razumes.
 
Odgovor na temu

maricab
Marica Blecic
Brno, CZ

Član broj: 153136
Poruke: 17
*.karneval.cz.

Sajt: www.marica.org


Profil

icon Re: [Excel] Import csv file-ova pomocu makroa20.08.2007. u 05:42 - pre 201 meseci
Citat:
mixi: ...podaci drugog csv-a posle prvog nastavljaju upisivati vodoravno, a ne uspravno...


Hm... kako to? Ne razumem, mislis obrce redove i kolone?

Citat:
mixi: ...Kako da stavim da se npr. ako prvi csv ima 23 reda sledeci csv pocne upisivati od A24, a ne od M1...


Ja sam shvatila da tebi treba macro da se pomera za 12 kolona? a ne redova....
U svakom slucaju, ovaj deo koda je bitan za odredjivanje gde ce se copirati:

'Ovo broji koliko redova ima u otvorenom csv file-u. Mozes da ubacis slicno za kolone
'Ovaj deo za kolone moras da ubacis posle razdvajanja i da deklarises novu promenljivu na pocetku Dim BrKolona As Integer

BrRedova = ActiveSheet.UsedRange.Rows.Count
Otvorena.Worksheets(1).Range("a:a").Select 'pretpostavljam da su podaci u csv u koloni A'
Selection.TextToColumns Destination:=ActiveCell, Other:=True, OtherChar:="|"
BrKolona = ActiveSheet.UsedRange.Columns.Count

'Ovo odredjuje polozaj sta ce biti selektovano u otvorenom csv file-u, mozes jos vise automatizovati ubacivanjem br. kolona:
'Range(Cells(1, 1), Cells(BrRedova, BrKolona)) - selektuje blok celija od A1,Cells(1, 1) - do poslednje koja u sebi sadrzi neki upis,Cells(BrRedova, BrKolona)

Otvorena.Worksheets(1).Range(Cells(1, 1), Cells(BrRedova, 12)).Select
Otvorena.Worksheets(1).Range(Cells(1, 1), Cells(BrRedova, BrKolona)).Select

'Ovaj deo odredjuje od koje celije ce poceti kopitanje u tvoj xls file:
'Cells(1, 1 + 12 * (i - 1)) - prvi broj je broj reda 1 ili ti red A, drugi broj je broj kolone 1 + 12 * (i - 1)

Bazna.Sheets(1).Cells(1, 1 + 12 * (i - 1)).Select

Nadam se da je jasno... posto nisam vise sigurna sta je konstantno kod tebe br reda ili kolona? i da li novi blok treba da se kopira u prvom novom praznom redu ili koloni?
 
Odgovor na temu

mixi
Milan Stojkovic
Miljakovac, Beograd

Član broj: 3433
Poruke: 47
*.eunet.yu.



Profil

icon Re: [Excel] Import csv file-ova pomocu makroa20.08.2007. u 07:45 - pre 201 meseci
Novi blok (novi csv) treba da se kopira u prvu slobodnu A: celiju, znaci ako je prvi csv file imao npr. 25 redova, podaci iz sledeceg csv-a treba da pocnu od A26.

Hvala ti za ove izmene, sada cu da se igram pa da vidim sta mogu sam da uradim.
 
Odgovor na temu

maricab
Marica Blecic
Brno, CZ

Član broj: 153136
Poruke: 17
*.karneval.cz.

Sajt: www.marica.org


Profil

icon Re: [Excel] Import csv file-ova pomocu makroa20.08.2007. u 22:44 - pre 201 meseci
Ok, ja sam lose shvatila....
U tom slucaju treba ti nesto ovakvo:
Ovo je razlika:
ActiveCell.Offset(BrRedova, 0).Activate ' ovo aktivira prvu slobodnu celiju u koloni A

_________________________________________________________________________
Sub CopyData()

Dim Bazna As Workbook 'Workbook u kojem je macro'
Dim Otvorena As Workbook 'Workbook npr. kumulativno_123.csv'
Dim i As Long
Dim BrRedova As Integer 'br redova u csv
Dim BrKolona As Integer 'br kolona u csv
Dim Putanja As String 'Putanja foldera u kojem se nalaze csv file-ovi'

Putanja = ThisWorkbook.Path
Range("A1").Select

Application.ScreenUpdating = False 'Da ti ne prikazuje kako otvara csv'
Application.DisplayAlerts = False

With Application.FileSearch
.NewSearch
.LookIn = Putanja
.Filename = "kumulativno_*" & ".csv"
.SearchSubFolders = False 'pretpostavljam da nema podfoldera'
.FileType = msoFileTypeExcelWorkbooks

If .Execute() > 0 Then
Set Bazna = ThisWorkbook

For i = 1 To .FoundFiles.Count
Set Otvorena = Workbooks.Open(.FoundFiles(i))
BrRedova = ActiveSheet.UsedRange.Rows.Count
BrKolona = ActiveSheet.UsedRange.Columns.Count
Otvorena.Worksheets(1).Range("a:a").Select 'pretpostavljam da su podaci u csv u koloni A'
Selection.TextToColumns Destination:=ActiveCell, Other:=True, OtherChar:="|"
Otvorena.Worksheets(1).Range(Cells(1, 1), Cells(BrRedova, BrKolona)).Select
Selection.Copy
Bazna.Activate
ActiveCell.PasteSpecial
ActiveCell.Offset(BrRedova, 0).Activate ' ovo aktivira prvu slobodnu celiju u koloni A
Otvorena.Close savechanges:=False 'imaces csv sacuvane u orginalu, nepromenjene'
Next i
End If
End With

Application.DisplayAlerts = True
Application.ScreenUpdating = True
MsgBox "--- Gotovo ---" 'na kraju procesa izbacice ti prozor sa porukom --- Gotovo ---'

End Sub

___________________________________________________________________

Eto isprobaj sad....

 
Odgovor na temu

mixi
Milan Stojkovic
Miljakovac, Beograd

Član broj: 3433
Poruke: 47
*.eunet.yu.



Profil

icon Re: [Excel] Import csv file-ova pomocu makroa21.08.2007. u 15:31 - pre 201 meseci
Nesto me stalno zeza, pokusavao sam svakave izmene, ali bezuspesno.

Evo okacio sam par kumulativnih csv file-ova i konacni xls da vidis sta treba da dobijem.

Hvala.
Prikačeni fajlovi
 
Odgovor na temu

maricab
Marica Blecic
Brno, CZ

Član broj: 153136
Poruke: 17
*.karneval.cz.

Sajt: www.marica.org


Profil

icon Re: [Excel] Import csv file-ova pomocu makroa21.08.2007. u 20:16 - pre 201 meseci
hm.... pogresila sam u redosledu naredbi na jednom mestu: brojac za kolone BrKolon mora biti posle naredbe TextToColumns inace nema mnogo smisla ;)
Takodje, naredba TextToColumns nije mogla dobro da radi jer tvoji csv file-ovi nisu generisani uvek na isti nacin. Ovako prepravljena ona donekle otklanja problem, ali postoji jos jedan problem u csv file-ovima.
Npr. u file-u kumulativno_200708211515 podatak u 4 redu (VIDOJE VASILJEVIC) je zapravo podeljen u dve kolone, pa je deo podataka u A4 a deo u B4.
Pri startovanju macroa ovi podaci iz B4 ce biti izbrisani....
Ja ne znam kako je doslo do greske pri generisanju csv file-a, zasto je taj podatak razdvojen?
Ako se greska uvek javlja na istom mestu (posle cetvrtog podatka, onda i taj deo moze da se automatizuje). Ostaje pitanje da li je tako?
Probaj da strartujes sada ovu verziju i ako jedino problem bude ovo sto sam navela, da se podaci za neke osobe gube posle 4 kolone... mogu da dodam jos par redova u kodu da se to generise kako treba....

Sub CopyData()

Dim Bazna As Workbook 'Workbook u kojem je macro'
Dim Otvorena As Workbook 'Workbook npr. kumulativno_123.csv'
Dim i As Long
Dim BrRedova As Integer 'br redova u csv
Dim BrKolona As Integer 'br kolona u csv
Dim Putanja As String 'Putanja foldera u kojem se nalaze csv file-ovi'

Putanja = ThisWorkbook.Path
Range("A1").Select

Application.ScreenUpdating = False 'Da ti ne prikazuje kako otvara csv'
Application.DisplayAlerts = False

With Application.FileSearch
.NewSearch
.LookIn = Putanja
.Filename = "kumulativno_*" & ".csv"
.SearchSubFolders = False 'pretpostavljam da nema podfoldera'
.FileType = msoFileTypeExcelWorkbooks

If .Execute() > 0 Then
Set Bazna = ThisWorkbook

For i = 1 To .FoundFiles.Count
Set Otvorena = Workbooks.Open(.FoundFiles(i))
BrRedova = ActiveSheet.UsedRange.Rows.Count

Otvorena.Worksheets(1).Range("a:a").Select 'pretpostavljam da su podaci u csv u koloni A'
Selection.TextToColumns Destination:=ActiveCell, DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Other:=True, OtherChar:="|"
BrKolona = ActiveSheet.UsedRange.Columns.Count
Otvorena.Worksheets(1).Range(Cells(1, 1), Cells(BrRedova, BrKolona)).Select
Selection.Copy
Bazna.Activate
ActiveCell.PasteSpecial
ActiveCell.Offset(BrRedova, 0).Activate ' ovo aktivira prvu slobodnu celiju u koloni A
Otvorena.Close savechanges:=False 'imaces csv sacuvane u orginalu, nepromenjene'
Next i
End If
End With

Application.DisplayAlerts = True
Application.ScreenUpdating = True
MsgBox "--- Gotovo ---" 'na kraju procesa izbacice ti prozor sa porukom --- Gotovo ---'

End Sub
 
Odgovor na temu

mixi
Milan Stojkovic
Miljakovac, Beograd

Član broj: 3433
Poruke: 47
*.ADSL.neobee.net.



Profil

icon Re: [Excel] Import csv file-ova pomocu makroa21.08.2007. u 23:07 - pre 201 meseci
Definitivno ga zbunjuje zarez. Pokusao sam da dodam kodu Comma:=False, ali ne pomaze. On svaki put prekida sa podacima na mestu gde se nalazi zarez. Na koji nacin da ignorisemo zarez, pa da ga macro jednostavno prepisuje kao i ostali text?
 
Odgovor na temu

maricab
Marica Blecic
Brno, CZ

Član broj: 153136
Poruke: 17
*.karneval.cz.

Sajt: www.marica.org


Profil

icon Re: [Excel] Import csv file-ova pomocu makroa21.08.2007. u 23:56 - pre 201 meseci
Probaj ovo:
ako se zarez javlja jos negde ovo mora dodatno da se modifikuje, posto ovaj makro spaja samo podatke iz prve i druge kolone...
Pa ako treba menjacemo ga opet ;) ali na mom kompu konacno izgleda kako treba ;)

Sub CopyData()

Dim Bazna As Workbook 'Workbook u kojem je macro'
Dim Otvorena As Workbook 'Workbook npr. kumulativno_123.csv'
Dim i As Long
Dim j As Integer
Dim stara As String
Dim BrRedova As Integer 'br redova u csv
Dim BrKolona As Integer 'br kolona u csv
Dim Putanja As String 'Putanja foldera u kojem se nalaze csv file-ovi'

Putanja = ThisWorkbook.Path
Range("A1").Select

Application.ScreenUpdating = False 'Da ti ne prikazuje kako otvara csv'
Application.DisplayAlerts = False

With Application.FileSearch
.NewSearch
.LookIn = Putanja
.Filename = "kumulativno_*" & ".csv"
.SearchSubFolders = False 'pretpostavljam da nema podfoldera'
.FileType = msoFileTypeExcelWorkbooks

If .Execute() > 0 Then
Set Bazna = ThisWorkbook

For i = 1 To .FoundFiles.Count
Set Otvorena = Workbooks.Open(.FoundFiles(i))
BrRedova = ActiveSheet.UsedRange.Rows.Count

For j = 1 To BrRedova
Cells(j, 1).Select
stara = ActiveCell.Value
ActiveCell.Value = stara & " " & Cells(j, 2).Value
Next j

Otvorena.Worksheets(1).Range("a:a").Select 'pretpostavljam da su podaci u csv u koloni A'
Selection.TextToColumns Destination:=ActiveCell, DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Other:=True, OtherChar:="|"
BrKolona = ActiveSheet.UsedRange.Columns.Count
Otvorena.Worksheets(1).Range(Cells(1, 1), Cells(BrRedova, BrKolona)).Select
Selection.Copy
Bazna.Activate
ActiveCell.PasteSpecial
ActiveCell.Offset(BrRedova, 0).Activate ' ovo aktivira prvu slobodnu celiju u koloni A
Otvorena.Close savechanges:=False 'imaces csv sacuvane u orginalu, nepromenjene'
Next i
End If
End With

Application.DisplayAlerts = True
Application.ScreenUpdating = True
MsgBox "--- Gotovo ---" 'na kraju procesa izbacice ti prozor sa porukom --- Gotovo ---'

End Sub
 
Odgovor na temu

maricab
Marica Blecic
Brno, CZ

Član broj: 153136
Poruke: 17
*.karneval.cz.

Sajt: www.marica.org


Profil

icon Re: [Excel] Import csv file-ova pomocu makroa22.08.2007. u 00:01 - pre 201 meseci
A inace to sa Comma:=False ne moze da funkcionise, zato sto u trenutku kada otvori csv podaci su vec razdvojeni odnosno zarez vise ne postoji...
S druge strane ako prilikom koriscenja TextToColumns izostavis Comma: to je indenticno kao da si stavio Comma:=False, posto je False pretpostavljena vrednost.
Cisto da znas, za ubuduce ;)
 
Odgovor na temu

mixi
Milan Stojkovic
Miljakovac, Beograd

Član broj: 3433
Poruke: 47
*.eunet.yu.



Profil

icon Re: [Excel] Import csv file-ova pomocu makroa22.08.2007. u 08:24 - pre 201 meseci
Ovo radi u situaciji kada imamo jedan zarez, a je li jednostavnije da se umesto spajanja dve celije ( u slucaju razdvajanja )
stavi code koji ce zameniti zarez sa prazninom " ".

Code:

For j = 1 To BrRedova
Cells(j, 1).Select
ako se u celiji nalazi "," zameni ga sa " "
Next j


Posto ne znam sintax-u vb-a, a trudim se da je naucim, u nemogucnosti sam da prepravim ovaj deo koda. A mislim da bi gornje resenje bilo adekvatno.

Jos jedanput se izvinjavam na maltretiranju.

[Ovu poruku je menjao mixi dana 22.08.2007. u 09:57 GMT+1]
 
Odgovor na temu

maricab
Marica Blecic
Brno, CZ

Član broj: 153136
Poruke: 17
199.64.72.*

Sajt: www.marica.org


Profil

icon Re: [Excel] Import csv file-ova pomocu makroa22.08.2007. u 09:12 - pre 201 meseci
Pa, mislim da nije problem, samo umesto " " stavi "," trebalo bi da radi.... meni nije ni palo na pamet ;)

U principu moglo bi da se jos automatizuje ako na pocetku pre TextToColumns komande, ubacis brojac koji ce da prebroji koliko kolona ima ( a bice ih onoliko koliko je bilo zareza)... pa da spoji toliko susednih, ili jos bolje neku do while petlju koja spaja dok ne naidje na praznu...


Citat:
Jos jedanput se izvinjavam na maltretiranju.

Stvarno nema problema, niko me ne tera da odgovaram ;)
 
Odgovor na temu

maricab
Marica Blecic
Brno, CZ

Član broj: 153136
Poruke: 17
199.64.72.*

Sajt: www.marica.org


Profil

icon Re: [Excel] Import csv file-ova pomocu makroa22.08.2007. u 09:22 - pre 201 meseci
Uf tek sad malo pazljivije procitah sta ti hoces.....

Pa to nije moguce, jer kad ti otvoris csv file, zarez vise ne postoji. Ne mozes da mu kazes da zameni nesto sto on ne vidi.
Ja sam pomislila da me pitas da promenis " " sa "," da bi ti umesto BEOGRAD BORCA pisalo BEOGRAD,BORCA

For j = 1 To BrRedova
Cells(j, 1).Select 'ovo selektuje A1 celiju npr
stara = ActiveCell.Value ' procita sta pise u A1
ActiveCell.Value = stara & " " & Cells(j, 2).Value 'spoji staru vrednost A1 i B1 i snimi u A1
Next j

Mada ako stavis "," umesto " " onda ce tamo gde je B prazna da ti prikazuje u 12 koloni zarez posle podatka....
Kad bolje razmislim, zadrzi kod kako sam ti prvobitno napisala.

 
Odgovor na temu

mixi
Milan Stojkovic
Miljakovac, Beograd

Član broj: 3433
Poruke: 47
*.eunet.yu.



Profil

icon Re: [Excel] Import csv file-ova pomocu makroa22.08.2007. u 15:46 - pre 201 meseci
Skinuo sam program Replacer, koji u svim file-ovima zamenjuje zarez sa prazninom (ili cime vec ja hocu), i nakon toga macro radi perfektno.

Hvala.
 
Odgovor na temu

[es] :: Office :: Excel :: [Excel] Import csv file-ova pomocu makroa

[ Pregleda: 5862 | Odgovora: 16 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.