logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak napisać program do sortowania danych z plików txt do xls?

kieras007 19 Wrz 2013 17:13 3039 15
REKLAMA
  • #1 12754397
    kieras007
    Poziom 10  
    Posty: 20
    Ocena: 2
    Witam,
    chciałbym napisać sobie program który ułatwi mi sortowanie danych. Mam 60 plików (format txt) w każdym po 52 linie teksu (a właściwie to liczb) przykład 24 linii:
    24;31620;-25,019~96.75,7.1391E-14,0.11841,4.7294E+08
    Z linii tej chciałbym w moim pierwszym pliku xls utworzyć kolumny a w niej wartości kolejno 24 | 31620 | -25,019 | 96.75 | 7.1391E-14 | 0.11841 | 4.7294E+08
    jako, że plików txt jest 60 chciałbym w rezultacie uzyskać tyle samo plików xls.
    Chciałbym również by mój program w kolejnych kolumnach obliczał mi jakieś wartości z danych które mam (np kolumn jest 7 w 8 chciałbym mieć formułę kolumna5+kolumna6).
    Kolejnym krokiem miało by być wybranie np 3 kolumny z każdego pliku i skopiowanie do oddzielnego pliku xls.
    W jakim języku najlepiej byłoby mi zrobić taki program i od czego mógłbym zacząć.
  • REKLAMA
  • #2 12754732
    markoz7874
    Poziom 31  
    Posty: 1776
    Pomógł: 132
    Ocena: 208
    kieras007 napisał:
    ..
    W jakim języku najlepiej byłoby mi zrobić taki program i od czego mógłbym zacząć.

    VB w excelu.
  • #3 12755860
    kieras007
    Poziom 10  
    Posty: 20
    Ocena: 2
    Tylko jak zrobić w excelu pierwszy krok tego mojego programu? Nie uśmiecha mi się za bardzo otwierać 60 plików i w każdym tworzyć makra...no chyba że nie znam jeszcze wszystkich możliwości VB w excelu.
    a jeżeli da się to zrobić w VB to jakich komend powinienem użyć by otwierać kolejno pliki txt i zapisywać je jako nowe w formacie xls
  • #4 12756047
    markoz7874
    Poziom 31  
    Posty: 1776
    Pomógł: 132
    Ocena: 208
    kieras007 napisał:
    ..a jeżeli da się to zrobić w VB to jakich komend powinienem użyć by otwierać kolejno pliki txt i zapisywać je jako nowe w formacie xls

    Włącz nagrywanie makra, wykonaj po kolei czynności dla jednego pliku, zatrzymaj makro, a następnie podejrzyj kod VB.
    Trochę mało czytelnie opisałeś swój problem i nie bardzo chce mi się wgryzać w treść pierwszego postu aby zrozumieć co miałeś na myśli.
    Dołącz dokument excela, opisz dokładnie w punktach co chcesz zrobić, to jakoś stopniowo coś doradzimy.
  • REKLAMA
  • #5 12756447
    cbrman
    Poziom 27  
    Posty: 441
    Pomógł: 177
    Ocena: 61
    Poczytaj ten wątek, w nim są przykłady procedur importu plików txt do Excela
  • REKLAMA
  • #6 12954468
    kieras007
    Poziom 10  
    Posty: 20
    Ocena: 2
    Witam poradziłem sobie z VB w Excel
    Mam tylko jedno pytanie, bo nigdzie nie mogę znaleźć odpowiedzi lub po prostu źle szukam.
    Program działa tak, że otwiera mi jakiś plik kopiuje dane wprowadza zmiany i zapisuje w formacie xls. Tak jak wspomniałem mam ok 60 plików.
    Mam problem z tym, że chciałbym, żeby móje makro nie sypało się gdy nie znajdzie pliku o nazwie pok.csv tylko, żeby przeszło do następnego pliku -192.csv. Jak to zrobić ??

    Mój kod programu to:
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    #7 12955078
    adamas_nt
    VIP Zasłużony dla elektroda
    Posty: 5320
    Pomógł: 1508
    Ocena: 659
    Dlaczego tego nie zapętlisz? Działania masz, zdaje się, identyczne.

    Wystarczy wyłączyć obsługę błędów i sprawdzić wartość zmiennej systemowej 'Err'
    W skrócie
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #8 12957933
    kieras007
    Poziom 10  
    Posty: 20
    Ocena: 2
    Dzięki wielkie !!
    Właśnie nie za bardzo wiedziałem jak włączyć obsługę błędów i sprawdzić wartość zmiennej systemowej Err
    Jeszcze raz dzięki !
  • #9 12969916
    kieras007
    Poziom 10  
    Posty: 20
    Ocena: 2
    Mam tylko jeszcze jeden problem.
    Tak jak zauważył adamas_nt działam identycznie jednak otwieram inne pliki jak również zapisuje w innym miejscu. Takich czynności powtarzam 57razy.
    Program niestety nie jest w stanie tego przemielić i wyskakuje błąd: procedure is too large
    Jeżeli usunę dwie ostatnie powtarzające się działania program działa już prawidłowo.
    Czy ktoś ma pomysł jak przeskoczyć ten problem i ewentualnie szczegółowo mi to opisać ??
  • REKLAMA
  • #10 12974228
    adamas_nt
    VIP Zasłużony dla elektroda
    Posty: 5320
    Pomógł: 1508
    Ocena: 659
    Poszukaj informacji o 'FileDialog' (każdorazowo wybierasz plik do otwarcia). Tu przerwaniem pętli może być zamknięcie okna bez wybrania pliku.

    Jeśli jest jeden wspólny katalog z plikami, to 'Dir' w pętli 'Do While' z filtrem.
  • #11 12976334
    kieras007
    Poziom 10  
    Posty: 20
    Ocena: 2
    Dzięki ! udało się ominąć problem :)
    Ale jak to często bywa człowiek chcę więcej heh
    Mianowice chciałbym, że pliki które otwierają się za pomocą polecenia:
    GetObject ("H:\Moje Makro\Pomiary\pok.csv")
    były otwierane w każdej lokalizacji. Tzn. Jeżeli skopiuje mój katalog Moje makro na dysk E:/ to nie będę musiał w kodzie zmieniać mu wszystkich lokalizacji.
    Wygląda to tak, że mam makro w katalogu "Moje Makro". Dalej w tym katalogu kolejny katalog "Pomiary" i tam są pliki które otwieram.
    Również w katalogu "Moje Makro" jest katalog "Pomiary xls" gdzie zapisywane są nowe pliki.
    Chciałbym tak jak wspomniałem wcześniej, żeby lokalizacja (...Moje Makro\Pomiary\pok.csv) była przypisana na stałe. A wszystko przed zmieniało się dynamicznie w zależności gdzie znajduję się ten katalog.
    Mam nadzieje, że w miarę jasno to opisałem.
  • #12 12976410
    adamas_nt
    VIP Zasłużony dla elektroda
    Posty: 5320
    Pomógł: 1508
    Ocena: 659
    Przetestuj (najpierw zapisz plik na dysku)
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Jeśli to podkatalogi tego samego folderu (równorzędne)
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #13 12979818
    kieras007
    Poziom 10  
    Posty: 20
    Ocena: 2
    Chyba nie za bardzo rozumiem jak to wstawić do mojego makra, żeby działało poprawnie.

    Polecenie:
    MsgBox ThisWorkbook.Path & "\Pomiary\pok.csv"
    Jedynie wyświetla mi komunikat o lokalizacji tego pliku ale nie otwiera go.

    Polecenie do zapisu nie zapisuje. Pewnie robię coś źle, ale nie wiem co.
  • Pomocny post
    #14 12979881
    adamas_nt
    VIP Zasłużony dla elektroda
    Posty: 5320
    Pomógł: 1508
    Ocena: 659
    kieras007 napisał:
    Chyba nie za bardzo rozumiem jak to wstawić do mojego makra
    Podstawić (z tego co opisujesz) jako argument (string) metody 'GetObject (tutaj)'
  • #15 13005403
    kieras007
    Poziom 10  
    Posty: 20
    Ocena: 2
    Wielkie dzięki !!
    A jest możliwość abym nie podawał za każdym razem nie podawał nazwy pliku tj:
    GetObject (ThisWorkbook.Path & "\Pomiary\pok.csv")
    ...
    GetObject (ThisWorkbook.Path & "\Pomiary\-192.csv")
    ...
    tylko, żeby mój program otwierał pliki korzystając z jakieś tablicy w której będą wypisane nazwy plików? Chodzi mi o to, że komenda otwierania będzie np wyglądać tak:
    GetObject (ThisWorkbook.Path & "\Pomiary\XXX")
    gdzie XXX=[pok.csv,-192.cvs....itd]
    i będzie mi otwierać kolejno pliki z tego XXX. Skróciłoby to mój program który ma chyba 2500 linii kodu do ok 150 linii.

Podsumowanie tematu

LABEL_AI_GENERATED
Użytkownik poszukiwał sposobu na napisanie programu do sortowania danych z plików tekstowych (.txt) do arkuszy kalkulacyjnych (.xls) w Excelu. Wskazano, że można to zrealizować za pomocą Visual Basic (VB) w Excelu. Użytkownik zadał pytania dotyczące otwierania wielu plików, automatyzacji procesu oraz obsługi błędów, gdy plik nie istnieje. Otrzymał porady dotyczące nagrywania makr, używania pętli oraz dynamicznego określania ścieżek do plików. Użytkownik z powodzeniem zaimplementował obsługę błędów i zredukował kod, jednak napotkał problem z rozmiarem procedury. Wskazano również na możliwość użycia tablic do przechowywania nazw plików, co mogłoby uprościć kod.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA