Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Wyszukiwanie - Wyszukiwanie / wyodrębnianie wielu plików

vaah92 14 Gru 2012 23:52 4446 23
  • #1 14 Gru 2012 23:52
    vaah92
    Poziom 7  

    Witam
    a więc sprawa wygląda następująco,
    jestem kompletnie zielony w temacie o który pytam więc nie zdziwie się jeżeli kompletnie nic nie zrozumiem. ;/
    moja praca polega na rozsyłaniu wielu zestawień i tym podobnych plików do Handlowców.
    Najłatwiej może opisze co chciałbym uzyskać.
    Zdarza się że do maila w outlooku - pojedynczego - muszę dodać sporą liczbę plików. Zazwyczaj wyszukuje je pojedynczo po fragmęcie nazwy (mam takie udostępnione w spisie wymaganych do tego konkretnie maila) . Pojedyncze dodawanie i tak jeden po 2.
    Zdarza się jednak że do poszczególnego maila muszę dodać np 400 plików z folderu w którym jest ich 10 000. i tu pytanie, czy istnieje jakiś program który wyodrębnił by je automatycznie po nazwach / fragmętach nazwy (są to nr , nie powtarzające się) , mam całą "bazę" potrzebnych zapisaną w ekselu
    problem polega na tym że pojedynczo zajmuje to ogromny szmat mojego czasu a ja prace zamiast na pozyskiwaniu klientów spedzam na klikaniu ctrl + c , ctrl + v

    ktoś kto mi w tym pomoże niewątpliwie zostanie moim bogiem.
    pozdrawiam

    0 23
  • #2 15 Gru 2012 00:42
    marcinj12
    Poziom 40  

    Zwykle nie piszę za kogoś programów (za darmo ;)), ale że mam wolny wieczór, święta za pasem, a ja zawsze chciałem zostać Bogiem... ;)

    Proszę, w załączniku arkusz Excelowy z prostym makrem. Nie testowałem prędkości dla takich dużych ilości plików, ale nie powinno być źle.

    Podajesz mu ścieżkę do katalogu źródłowego (z plikami) oraz (istniejącego i pustego) docelowego, do którego pliki zostaną skopiowane. Ze względów bezpieczeństwa nie czyści go automatycznie przed użyciem.

    W kolumnę A wklejasz nazwy plików do skopiowania (z rozszerzeniem, w razie czego można go przerobić na jakiś inny wzorzec dopasowania...) i klikasz przycisk.
    Kolejne pliki są kopiowane do katalogu docelowego, a w kolumnie B jest wpisywany "status" - "OK" jeżeli plik źródłowy istniał, lub "brak pliku", jeżeli nie było pliku o takiej nazwie w katalogu.

    Na koniec jest wyświetlane powiadomienie o wynikach kopiowania.

    Po takiej operacji wchodzisz do katalogu docelowego, pakujesz pliki zipe'em w jedno archiwum i wysyłasz outlookiem.

    O coś takiego chodziło?? Kiedy mogę zacząć przemieniać wodę w wino?? ;)

    Swoją drogą - macie raczej kiepsko ten proces zorganizowany, skoro musisz to robić tak, jak piszesz... Zlecilibyście jakiemuś informatykowi żeby Wam jakąś aplikację czy system webowy postawił albo opracował jakąś aplikację z danymi trzymanymi w bazie, a nie przesyłali po 400 z 10000 załączników w mailu ;)

    1
  • #3 15 Gru 2012 13:22
    vaah92
    Poziom 7  

    Dzięki ogromne , tylko tak jak mówiłem jestem kompletnie nie z tego tematu,
    robię wszystko tak jak wypisałeś, jednak kiedy klikam na wyszukaj nic się nie dzieje , kiedy kliknę dwa razy otwiera mi się okno ze skryptem.

    Prawdopodobnie powinienem jakoś uruchomić ten program ale z moją wiedzą to mogę chodzić naokoło komputera i szukać przycisku "RUN"

    A co do mojej firmy to faktycznie jest jak napisałeś. Co śmieszniejsze to ogulnopolski moloch , ale ich interesuje wynik , nie jak go wykręcisz

    0
  • #4 15 Gru 2012 13:30
    marcinj12
    Poziom 40  

    Czy jak najeżdżasz na przycisk, to kursor zmienia się w cztery strzałki? Prawdopodobnie nie masz poprawnie włączonej obsługi makr w Excelu.
    W zależności od tego, czy używasz wersji 2003 czy 2007 (czy jeszcze innych), spróbuj to zrobić według załączonej instrukcji.

    0
  • #5 18 Wrz 2013 11:54
    magatah5
    Poziom 8  

    Witam serdecznie
    Mam ten sam problem co vaah92. I jestem równie „zielony”.
    Chętnie dołączę do grona „wiernych”. To makro działa znakomicie. 
    Mam jednak problem: w jaki sposób je zmodyfikować:
    1. Aby w kolumnie A można było wprowadzać tylko fragment nazwy pliku (bez rozszerzenia).
    2. Aby było możliwe kopiowanie oprócz plików także całych folderów i podfolderów.
    Będę baaardzo wdzięczny za pomoc. Jak sobie uświadomię ile czasu zmarnowałem przez ostatnie 10 lat…
    Serdecznie pozdrawiam

    0
  • #6 18 Wrz 2013 15:21
    marcinj12
    Poziom 40  

    magatah5 napisał:
    Witam serdecznie
    Mam ten sam problem co vaah92. I jestem równie „zielony”.
    Chętnie dołączę do grona „wiernych”. To makro działa znakomicie. 
    Mam jednak problem: w jaki sposób je zmodyfikować:
    1. Aby w kolumnie A można było wprowadzać tylko fragment nazwy pliku (bez rozszerzenia).
    2. Aby było możliwe kopiowanie oprócz plików także całych folderów i podfolderów.
    Będę baaardzo wdzięczny za pomoc. Jak sobie uświadomię ile czasu zmarnowałem przez ostatnie 10 lat…
    Serdecznie pozdrawiam
    A proszę, w załączniku wersja druga :)
    - dopasowuje nazwę do wzorca (dowolny ciąg znaków można zastąpić gwiazdką),
    - dodałem opcję usunięcia i utworzenia pustego folderu docelowego przed rozpoczęciem kopiowania,
    - może kopiować też foldery z podfolderami (założenie: wyszukuje po nazwie i kopiuje cały folder z podfolderami tylko na pierwszym poziomie - tym z plikami). Czyli jeżeli masz ścieżkę:
    C:\katalog źródłowy\folder1\podfolder\jakiś_plik.jpg
    gdzie jako katalog źródłowy podasz: C:\katalog źródłowy , to przeszukuje i dopasowuje do wzorca tylko katalog o nazwie folder1.

    0
  • #7 19 Wrz 2013 10:06
    magatah5
    Poziom 8  

    Witam serdecznie
    Wieeelkie dzięki !!!
    Nie chciałbym nadużywać Twojej uprzejmości, ale mam jeszcze pytanie:
    - czy dałoby się uniknąć wstawiania "gwiazdek"?

    Serdecznie pozdrawiam

    0
  • #8 19 Wrz 2013 14:29
    marcinj12
    Poziom 40  

    magatah5 napisał:
    czy dałoby się uniknąć wstawiania "gwiazdek"?
    Dałoby się, tyko wtedy, jeżeli chcesz wyszukiwać zawsze po fragmencie nazwy - ta reguła będzie obowiązywała dla wszystkich nazw...
    W kodzie makra (ALT+F11) znajdź fragment:
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    i zastąp go tym:
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • #9 20 Wrz 2013 09:59
    magatah5
    Poziom 8  

    Jeszcze raz wielkie dzięki. Działa znakomicie!

    0
  • #10 07 Paź 2013 11:05
    magatah5
    Poziom 8  

    Witam serdecznie jeszcze raz
    Mam pytanie:
    Czy dałoby się to makro zmodyfikować tak, by przeszukiwany był folder o poziom niżej?

    (W Twoim przykładzie ścieżki "Podfolder")
    Serdecznie pozdrawiam

    0
  • #11 07 Paź 2013 15:02
    marcinj12
    Poziom 40  

    magatah5 napisał:
    Czy dałoby się to makro zmodyfikować tak, by przeszukiwany był folder o poziom niżej?
    (W Twoim przykładzie ścieżki "Podfolder")
    Serdecznie pozdrawiam
    Edit: załącznik w v3 nie działał jak trzeba, więc najnowsza jest v4 poniżej.

    0
  • #12 08 Paź 2013 10:56
    magatah5
    Poziom 8  

    Witam serdecznie
    Bardzo dziękuję, ale to chyba nie działa. Może nie dość precyzyjnie opisałem problem.
    Struktura katalogów wygląda tak: w katalogu X znajduje się kilkadziesiąt podkatalogów (A. B, C….) zawierających pliki i katalogi. W świetnie działającej wersji v.2 konieczne jest podanie ścieżki do poszczególnych podkatalogów (A, B, C…). Czy jest możliwe wyszukiwanie plików i folderów we wszystkich podkatalogach jednocześnie po podaniu ścieżki tylko do katalogu X?
    Nie chcę się mądrzyć, ale czy nie wystarczy zmienić coś w tej części?
    src = Dir$(katalogZrodlowy & "*" & plik & "*", vbDirectory)
    While src <> ""
    If src <> "" And src <> "." And src <> ".." Then
    sciezka = katalogZrodlowy & src
    If (GetAttr(sciezka) And vbDirectory) = vbDirectory Then
    fName = Split(sciezka, "\")

    Serdecznie pozdrawiam

    0
  • #13 08 Paź 2013 11:24
    marcinj12
    Poziom 40  

    magatah5 napisał:
    W świetnie działającej wersji v.2 konieczne jest podanie ścieżki do poszczególnych podkatalogów (A, B, C…).
    No właśnie nie do końca - założeniem było, że podajesz tam ścieżkę do katalogu X.

    magatah5 napisał:
    Struktura katalogów wygląda tak: w katalogu X znajduje się kilkadziesiąt podkatalogów (A. B, C….) zawierających pliki i katalogi. W świetnie działającej wersji v.2 konieczne jest podanie ścieżki do poszczególnych podkatalogów (A, B, C…). Czy jest możliwe wyszukiwanie plików i folderów we wszystkich podkatalogach jednocześnie po podaniu ścieżki tylko do katalogu X?
    To właśnie próbowałem ustalić - rozumiem, że chcesz przeszukiwać wszystkie pliki i podkatalogi? To da się zrobić, ale...

    Załóżmy, że masz taką strukturę katalogu źródłowego:
    Code:
    X
    
    |-WAKACJE_2011
      |-ZDJĘCIA
         |--img01.png
         |--img02.png
         |--zdjęcie1.png
      |-pic01.png
    |-WAKACJE_2012
      |-ZDJĘCIA
         |--img01.png
         |--img02.png
         |--zdjęcie2.png
      |-pic01.png
    |-WAKACJE_2013
      |-ZDJĘCIA
         |--img01.png
         |--img02.png
         |--zdjęcie3.png
      |-pic01.png

    i do niego wyszukujesz według wzorca ZDJĘCIA.
    Pytanie, co w takim wypadku program ma skopiować?? Są 3 foldery ZDJĘCIA z taką samą zawartością - w wypadku kopiowania zostaną nadpisane, i finalnie będzie tylko jeden katalog ZDJĘCIA z 2013 roku.

    Drugi problem: załóżmy, ze wzorzec jest: ZDJĘC , czyli pasują zarówno katalogi, jak i nazwa "zdjęcie1.png" etc. W takim wypadku skopiowane zostaną zarówno foldery ZDJĘCIA z podkatalogami i plikami, jak i również pliki: zdjęcie1.png, zdjęcie2.png i zdjęcie3.png , które już w tych katalogach są - czyli pliki będą zdublowane. Jak pewnie zauważyłeś, program w katalogu wynikowym nie odzwierciedla struktury katalogów - kopiuje tam jedynie pliki i foldery pasujące do wzorca nazwy.

    0
  • #14 08 Paź 2013 12:45
    magatah5
    Poziom 8  

    Struktura katalogów jest taka:
    X (Katalog główny)
    A (podkatalog)
    A-xxxxx.pdf
    A-yyyyyy.pdf
    A-zzzzzzz (folder)
    B (podkatalog)
    B-xxxxx.pdf
    B-yyyyyy.pdf
    B-zzzzzzz (folder)
    itd.
    Chodzi mi o kopiowanie PDF i folderów (które mają swoje unikalne nazwy, a więc nie mogą się nadpisywać) znajdujących się w podkatalogach A, B itd (jest ich kilkadziesiąt) podając ścieżkę tylko do foldera głównego (X), czyli tak jakby nie znajdowały się w podkatalogach, a bezpośrednio w X.
    Program w wersji v.2 świetnie sobie radzi, ale gdy np. potrzebuję pliki A-xxxxx.pdf, B-yyyyy.pdf, F-xxxxx.PDF za każdym razem muszę podać ścieżkę (do podkatalogów: A, B, F itd.), a przy kilkuset plikach to dość niewygodne.

    0
  • #15 08 Paź 2013 14:50
    marcinj12
    Poziom 40  

    Witam,
    W załączniku (mocno) przerobiona wersja v4 pliku. Może coś w tym stylu spełni swoją rolę.

    Tym razem podejście jest trochę inne: najpierw makro sobie tworzy listę wszystkich plików, folderów i podfolderów w w katalogu źródłowym (co może trochę potrwać przy jakiejś ogromniej ilości plików...).
    Następnie próbuje dopasować nazwę (pliku, katalogu - wielkość liter nie ma znaczenia) do podanego wzorca - jeżeli się zgadza, to kopiuje plik (lub folder z zawartością) bezpośrednio do katalogu docelowego.
    Jeżeli nazwa się powtarza - pliki nadpisuje bez pytania, a zawartość katalogów "scala" w jeden.

    0
  • #16 09 Paź 2013 11:36
    magatah5
    Poziom 8  

    Witam,
    Wieeelkie dzięki - działa znakomicie!
    Serdecznie pozdrawiam

    0
  • #17 25 Sty 2015 09:36
    1499497
    Użytkownik usunął konto  
  • #18 25 Sty 2015 12:02
    marcinj12
    Poziom 40  

    Kiluk napisał:
    mam tylko jedno zapytanie czy te same pliki muszą być nadpisywane czy można by sprawić aby makro zmieniało nazwę (dodając np "1" na końcu nazwy.
    Można zmodyfikować kod, żeby tak działał... Patrz: załącznik.

    1
  • #19 25 Sty 2015 18:23
    1499497
    Użytkownik usunął konto  
  • #20 25 Sty 2015 23:18
    marcinj12
    Poziom 40  

    Kiluk napisał:
    co jest powodem, jak szukam np w na dysku D:\ (na całej partycji) to wyskakuje komunikat permition denied
    Najprawdopodobniej makro próbuje odczytać jakiś niedozwolony katalog systemowy.

    Makro zostało zaprojektowane do konkretnego działania - przeszukiwania plików we wskazanym folderze źródłowym i kopiowaniu ich do docelowego. Jak widać próby jego modyfikacji mogą zakończyć się różnymi dziwnymi błędami.

    U mnie za ten błąd odpowiadała próba odczytu ukrytego katalogu "System Volume Information" - w tym przypadku można zastosować proste rozwiązanie: zmodyfikować początek funkcji GetFilesInFolder na
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    Przy odczycie dysku systemowego pewnie wystąpiłoby więcej takich katalogów - ale jak już wspomniałem, nie do tego to makro zostało stworzone...

    0
  • #21 26 Sty 2015 07:26
    1499497
    Użytkownik usunął konto  
  • #22 26 Sty 2015 09:29
    kinggustav
    Poziom 20  

    Ktoś tu wyraźnie zaoszczędził na komputeryzacji firmy i to chyba raczej nie ty. :-) Chętnie zadałbym mu pytanie jaka jest wartość biznesowa przetrzymywania tylu zmultiplikowanych danych w postaci plików. Znam wielu "oszczędnych" przedsiębiorców (np 500zł to za dużo na sieć łączącą 3 kompy+soft do obslugi firmy), ale czegoś takiego jeszcze nie widziałem, raczej wogóle rezygnują z komputerów.
    Oczywiście da się wyszukiwać w plikach, ale to będzie troszkę trwało. Trzeba otwierać każdy plik po kolei i szukać w zależności od pliku, a znając rezultat kopiować w określone miejsce. W plikach Excelowych warto wykorzystać wyszukiwanie funkcją aplikacji, w tekstowych chyba łatwiej będzie szukać stringu w stringu, chociaż może być z tym pewien problem: czy masz gwarancję, że ten NIP mieści sie w jednej linii albo ze w pliku występuje tylko jeden NIP? Trzeba to uwzględnić w rozwiązaniu.

    0
  • #23 27 Sty 2015 12:58
    1499497
    Użytkownik usunął konto