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.

=fragment.tekstu w VBA tekst bez spacji w jednej komórce

Malgorzata1990 10 Lis 2017 15:48 1065 16
  • #1 10 Lis 2017 15:48
    Malgorzata1990
    Poziom 3  

    Witam,
    proszę o podpowiedź czy można stworzyć pętlę na znakach będących treścią 1 komórki w Excelu?

    Chciałabym wyszukiwać i kopiować fragmenty tekstu, tak jak w załączonym przykładzie, ale za pomocą kodu VBA, a nie funkcji =fragment.tekstu.

    0 16
  • #2 10 Lis 2017 18:14
    JRV
    Specjalista - VBA, Excel

    Skad to zrodlo danych? Czy mozna zalaczyc zrodlo? Tenj opis i fotka to tylko dla 'telepatysty', osoby, kto wie czytac cudze myslenki

    0
  • #3 10 Lis 2017 19:33
    Malgorzata1990
    Poziom 3  

    Skopiowałam kod z internetu, który sczytuje do 1 komórki cały tekst z pdfa.
    O to źródło chodzi czy o plik pdf?

    0
  • #4 10 Lis 2017 19:49
    JRV
    Specjalista - VBA, Excel

    Raczej w Akrobacie robic eksport do Excel'a
    Zalacz pdf-plik

    0
  • #6 10 Lis 2017 22:09
    Prot
    Poziom 30  

    Na podstawie załączonego pliku wnoszę, że masz do czynienia z jakimś dokumentem bankowym.
    Jeśli tak, to z doświadczenia wiem, że większość szanujących się (i szanujących klientów :D ) banków oferuje możliwość importu swych dokumentów również w "bardziej strawnych" formatach niż pdf np. xml, csv i inne specjalne zestandaryzowane pliki tekstowe typu MT940.

    Import do Excela danych z plików xml czy csv - nie stanowi prawie żadnego problemu, zaś przy specjalnych plikach tekstowych konieczne jest ściągnięcie z banku pliku ze szczegółowym opisem formatu pliku.

    1
  • #7 10 Lis 2017 22:16
    JRV
    Specjalista - VBA, Excel

    CreateObject("AcroExch.App") - mam blad, ktorze 'Reference' do Akrobata ??
    Mam Adobe Acrobat Reader DC, nie ma w 'References'

    0
  • #8 11 Lis 2017 11:43
    Malgorzata1990
    Poziom 3  

    Niestety nie mam możliwości uzyskania pliku w innym formacie. Jest to dokument z procesu sprzedaży, który chce zautomatyzować w swojej pracy, dlatego zaczęłam interesować się vba.

    Skrypt działa w wersji Pro. Nie działa w Readerze.

    Może poszukam, jakiegoś kodu przerzucającego od razu do tabeli Excela. Może faktycznie będzie łatwiej. Spróbuję.

    0
  • #10 11 Lis 2017 13:06
    Prot
    Poziom 30  

    Jeśli konwersja danych z pdf do Excela nie będzie satysfakcjonująca (mam w tym zakresie przykre doświadczenia :cry: ) ? To można wrócić do pierwotnej kwestii:

    Malgorzata1990 napisał:
    czy można stworzyć pętlę na znakach będących treścią 1 komórki w Excelu?


    W mojej ocenie - tak - wykorzystując kod VBA oparty na wyrażeniach regularnych :idea:

    W moich rozwiązaniach tego typu wykorzystuję specjalną funkcję GetItem:
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    która w oparciu o wzorzec wyrażenia regularnego wyszukuje wszystkie (pojedynczo tj 1,2,3 itd) wystąpienia określonych wzorcem substringów. :spoko:

    0
  • #11 11 Lis 2017 22:05
    Malgorzata1990
    Poziom 3  

    [/quote]
    która w oparciu o wzorzec wyrażenia regularnego wyszukuje wszystkie (pojedynczo tj 1,2,3 itd) wystąpienia określonych wzorcem substringów. :spoko:[/quote]

    Czy możesz mi wyjaśnić na moim przykładzie? Czyli w ciągu: "WedeliveraccordingtobelowmentionedandenclosedconditionsCurrencyEURItemMaterialDescriptionQuantitySellingpricePriceunit Value000010S0.471.627RSB8160.158F6.31.5SteelNickeled136.000PCE8,15EUR1.000PCE1.108,408,15EUR1.000PCE1.108,40EstimateddateofdeliveryDay25.05.2018000020S0.249"
    odnajdzie substringi np. "000010" (nie wiem gdzie wpisać te substringi w Twoim kodzie) i co się dalej dzieje? Wpisuje mi w komórki?

    Konwertowanie na tabele chciałabym robić wewnątrz kodu, w ramach narzędzi Office.
    Zobaczyłam, że konwertowanie na txt jest bardziej uporządkowane, więc poszłam w tym kierunku i wyniki przedstawiam poniżej.
    Wynik końcowy jest już mi bliższy, powstał z odczytania pliku txt

    Open myFile For Input As #1

    Do Until EOF(1)
    Line Input #1, textline
    text = text & textline
    Loop

    posLat = InStr(text, "ZD")
    Range("A1").Value = Mid(text, posLat + 2, 8)
    'ActiveSheet.Range("A2:A10").Value = A1 CHCĘ PRZYPISAĆ WARTOŚĆ A1 DO ZAKRESU KOMÓREK

    posLat = InStr(text, "000010")
    Range("B1").Value = Mid(text, posLat + 7, 163)

    posLat = InStr(text, "000020")
    Range("B2").Value = Mid(text, posLat + 7, 157)

    posLat = InStr(text, "000030")
    Range("B3").Value = Mid(text, posLat + 7, 172)

    posLat = InStr(text, "000040")
    Range("B4").Value = Mid(text, posLat + 7, 159)

    posLat = InStr(text, "000050")
    Range("B5").Value = Mid(text, posLat + 7, 147)

    posLat = InStr(text, "000060")
    Range("B6").Value = Mid(text, posLat + 7, 148)

    End Sub

    =fragment.tekstu w VBA tekst bez spacji w jednej komórce

    Tylko na razie z palca wpisuję ostatni argument i zastanawiam się jak wyjąć kolejne dane jak ilość [liczba z kropką, zawsze po 5znakowej spacji +PCE], cenę (pomiędzy PCE a EUR) oraz datę po wyrazie Day. Może uda się fukcjami używającymi pozycje...?

    0
  • #12 12 Lis 2017 12:19
    Prot
    Poziom 30  

    Malgorzata1990 napisał:
    zastanawiam się jak wyjąć kolejne dane


    Niestety tu jest największa trudność w sformułowaniu wyrażenia regularnego, które wychwyci z całego stringu odpowiednie substringi.

    W moim kodzie konwertującym dane z pliku MT940 do Excela wygląda to mniej więcej tak:
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    Wyszukuje wszystkie "rekordy" danych w stringu strStream, a potem poszczególne "pola" z tego rekordu.
    Do tworzenia właściwych wyrażeń regularnych wykorzystywałem (do testowania :D ) zwykły notepad++.

    0
  • #13 22 Lis 2017 22:21
    Prot
    Poziom 30  

    Malgorzata1990 napisał:
    Proszę, plik w załączniku
    Załączniki:
    STOCKO Order confirmation 2906412.pdf


    Konwertowanie przykładowego dokumentu pdf autorki można przeprowadzić dwuetapowo:

    1. kopiowanie istotnych treści z Adobe Readera do arkusza "temp"
    =fragment.tekstu w VBA tekst bez spacji w jednej komórce2017-11...png Download (47.53 kB)
    lub wykorzystanie przekształcenia jakimś softem typu "pdf to csv";

    2. wykorzystanie makra vba do konwersji łańcucha stringów w przejrzystą tabelę.
    =fragment.tekstu w VBA tekst bez spacji w jednej komórce2017-11-2..1).png Download (24.98 kB)

    W zastosowanej metodzie konwersji RegEx (wyrażeń regularnych) oczywiście najtrudniejsze jest utworzenie wzorców dla całego łańcucha, poszczególnych rekordów i pól danych. Przykładowe rozwiązania przedstawiam w załączonym pliku.
    Konw.7z Download (24.63 kB)Punkty: 4 dla użytkownika

    0
  • #17 23 Lis 2017 09:00
    JacekCz
    Poziom 36  

    1. nie wierzę, że z SAP Netweaver nie da się uzyskać innych formatów
    2. jest totalnie nielogiczne ładną "obiektową" postać PDF (dokument PDF który nie pochodzi ze skanera, tylko z software, jest dość ładnym drzewem) jest masakrować do strumienia literek, po czym sie biedzić jak ten strumień na nowo podzielić. Jest spora ilość bibliotek Javy czy .NET które się potrafią w to wczytać.
    3. jest sprzedaż, są pieniądze, za coś trzeba zapłacić.

    0