Excel Forum - Porady, Pomoc,  Excel Help, Excel FAQ Strona Główna
 FAQ  RegulaminRegulamin  Szukaj   Użytkownicy   Grupy   Rejestracja   Profil   Twoje wiadomości   Zaloguj 


Poprzedni temat «» Następny temat
ID tematu: 64435 Skopiuj do schowka Export kolumn z pliku pdf
Autor Wiadomość
Morusek 
Starszy Forumowicz


Wersja: Win Office 2013
Posty: 48
Wysłany: 14-03-2019, 20:08   Export kolumn z pliku pdf

Witam Forumowiczów

Mam do wykonania analizę wartości magazynu wygenerowaną w pliku PDF.
Niestety - po zaznaczeniu całej tabeli w PDF i skopiowaniu jej do arkusza - dane z wiersza kopiują się do jednej komórki w jednej kolumnie (załączniki).
Ilości znaków w każdej z kolumn są różne więc rozdział na podstawie ilości znaków nie zadziała
Podobnie "spacja" jako ogranicznik w opcji "tekst jako kolumny".
Będę wdzięczny za podpowiedź jak skopiować całą treść tabeli do Excela z zachowaniem podziału na kolumny.
W załącznikach: plik źródłowy PDF oraz plik Excel z ilustracją problemu.

Z góry dzięki !
Pozdrawiam

Analiza stanów.xlsx
Pobierz Plik ściągnięto 5 raz(y) 20.72 KB

Stan magazynu - export pdf.pdf
Pobierz Plik ściągnięto 15 raz(y) 193.28 KB

ID posta: 364244 Skopiuj do schowka
 
 
Marecki 
Excel Expert



Wersja: Win Office 2019
Pomógł: 2079 razy
Posty: 6858
Wysłany: 14-03-2019, 21:04   

Pobierz narzędzie z http://www.excelforum.pl/viewtopic.php?p=228602
Ustaw opcje jak na foto.
W PowerQuery wklej zapytanie:
Kod:
let
    Źródło = Csv.Document(File.Contents("C:\Users\mkkk2\Pobrane\PDF_to_TXT\My_PDF.txt"),1,"#",null,65001),
    #"Przefiltrowano wiersze" = Table.SelectRows(Źródło, each ([Column1] <> "Firma:" and [Column1] <> "Stan aktualny" and [Column1] <> "Stan magazynu: Główny" and [Column1] <> "Stan na dzien:" and [Column1] <> "Wydrukowano 2018-08-03")),
    #"Podzielono kolumnę według ogranicznika" = Table.SplitColumn(#"Przefiltrowano wiersze", "Column1", Splitter.SplitTextByEachDelimiter({" "}, QuoteStyle.Csv, true), {"Column1.1", "Column1.2"}),
    #"Podzielono kolumnę według ogranicznika1" = Table.SplitColumn(#"Podzielono kolumnę według ogranicznika", "Column1.1", Splitter.SplitTextByEachDelimiter({" "}, QuoteStyle.Csv, true), {"Column1.1.1", "Column1.1.2"}),
    #"Podzielono kolumnę według ogranicznika2" = Table.SplitColumn(#"Podzielono kolumnę według ogranicznika1", "Column1.1.1", Splitter.SplitTextByEachDelimiter({" "}, QuoteStyle.None, true), {"Column1.1.1.1", "Column1.1.1.2"}),
    #"Podzielono kolumnę według ogranicznika3" = Table.SplitColumn(#"Podzielono kolumnę według ogranicznika2", "Column1.1.1.1", Splitter.SplitTextByEachDelimiter({" "}, QuoteStyle.Csv, true), {"Column1.1.1.1.1", "Column1.1.1.1.2"}),
    #"Podzielono kolumnę według ogranicznika4" = Table.SplitColumn(#"Podzielono kolumnę według ogranicznika3", "Column1.1.1.1.1", Splitter.SplitTextByEachDelimiter({" "}, QuoteStyle.Csv, true), {"Column1.1.1.1.1.1", "Column1.1.1.1.1.2"}),
    #"Podzielono kolumnę według ogranicznika5" = Table.SplitColumn(#"Podzielono kolumnę według ogranicznika4", "Column1.1.1.1.1.1", Splitter.SplitTextByEachDelimiter({" "}, QuoteStyle.Csv, false), {"Column1.1.1.1.1.1.1", "Column1.1.1.1.1.1.2"}),
    #"Podzielono kolumnę według ogranicznika6" = Table.SplitColumn(#"Podzielono kolumnę według ogranicznika5", "Column1.1.1.1.1.1.2", Splitter.SplitTextByEachDelimiter({" "}, QuoteStyle.Csv, false), {"Column1.1.1.1.1.1.2.1", "Column1.1.1.1.1.1.2.2"}),
    #"Nagłówki o podwyższonym poziomie" = Table.PromoteHeaders(#"Podzielono kolumnę według ogranicznika6", [PromoteAllScalars=true]),
    #"Zamieniono wartość" = Table.ReplaceValue(#"Nagłówki o podwyższonym poziomie",".","",Replacer.ReplaceText,{"L.P.", "J.m."}),
    #"Zmieniono typ" = Table.TransformColumnTypes(#"Zamieniono wartość",{{"L.P.", Int64.Type}, {"Stan", Int64.Type}, {"VAT", Int64.Type}, {"Wartość", Int64.Type}}),
    #"Przefiltrowano wiersze1" = Table.SelectRows(#"Zmieniono typ", each ([Stan] <> null))
in
    #"Przefiltrowano wiersze1"
zmień tylko ścieżkę do pliky na swoją. Umnie jest
Kod:
"C:\Users\mkkk2\Pobrane\PDF_to_TXT\My_PDF.txt"

A otrzymasz dane jak w załączniku.

pdf.jpg
Plik ściągnięto 15 raz(y) 44 KB

pdf.xlsx
Pobierz Plik ściągnięto 5 raz(y) 24.53 KB

_________________
Hardware - ta część komputera, którą można kopnąć kiedy software przestanie funkcjonować.

Szkolenia z Excela , FB
Office 2019 Professional Plus , Windows 10 x64
Pozdrawiam, były mkkk23 teraz Marecki.
ID posta: 364253 Skopiuj do schowka
 
 
Morusek 
Starszy Forumowicz


Wersja: Win Office 2013
Posty: 48
Wysłany: 15-03-2019, 11:28   

W zasadzie rozwiązanie przynosi rezultaty - dzięki!
Mam tylko problem polegający na tym, że konwerter PDF do TXT mimo odpowiedniego ustawienia
- wtrąca dwuwierszowy podział stron o treści:

"Strona 4 / 302
Wydrukowano z programu WAPRO Mag (wersja x.xx.x)"


Aby wszystko działało muszę ręcznie usuwać w/w treść.

Pytanie jak automatycznie na każdej stronie usunąć pierwszy wiersz (o zmiennej treści) oraz drugi (o stałej treści)?
Chodzi o to aby skasować treść wierszy oraz same wiersze - tak aby po usuniętej treści nie postała luka na 2 wiersze...
ID posta: 364293 Skopiuj do schowka
 
 
Marecki 
Excel Expert



Wersja: Win Office 2019
Pomógł: 2079 razy
Posty: 6858
Wysłany: 15-03-2019, 13:32   

Sprawdź takie zapytanie w PQ:
Kod:
let
    Źródło = Csv.Document(File.Contents("C:\Users\mkkk2\Pobrane\PDF_to_TXT\My_PDF.txt"),1,"#",null,65001),
    AddColumn = Table.AddColumn(Źródło, "Pierwsze znaki", each Text.Start([Column1], 2), type text),
    TransformColumnTypes1 = Table.TransformColumnTypes(AddColumn,{{"Pierwsze znaki", type number}}),
    RemoveRowsWithErrors = Table.RemoveRowsWithErrors(TransformColumnTypes1, {"Pierwsze znaki"}),
    RemoveColumns = Table.RemoveColumns(RemoveRowsWithErrors,{"Pierwsze znaki"}),
    SplitColumn1 = Table.SplitColumn(RemoveColumns, "Column1", Splitter.SplitTextByEachDelimiter({" "}, QuoteStyle.Csv, true), {"Column 1", "Column 6"}),
    SplitColumn2 = Table.SplitColumn(SplitColumn1, "Column 1", Splitter.SplitTextByEachDelimiter({" "}, QuoteStyle.Csv, true), {"Column 1", "Column 5"}),
    SplitColumn3 = Table.SplitColumn(SplitColumn2, "Column 1", Splitter.SplitTextByEachDelimiter({" "}, QuoteStyle.Csv, true), {"Column 1", "Column 4"}),
    SplitColumn4 = Table.SplitColumn(SplitColumn3, "Column 1", Splitter.SplitTextByEachDelimiter({" "}, QuoteStyle.Csv, false), {"Column 1", "Column 2"}),
    SplitColumn5 = Table.SplitColumn(SplitColumn4, "Column 2", Splitter.SplitTextByEachDelimiter({" "}, QuoteStyle.Csv, false), {"Column 2", "Column 3"}),
    TransformColumnTypes2 = Table.TransformColumnTypes(SplitColumn5,{{"Column 1", type number}, {"Column 4", type number}, {"Column 6", type number}})
in
    TransformColumnTypes2

Oczywiście dostosuj ścieżkę.
_________________
Hardware - ta część komputera, którą można kopnąć kiedy software przestanie funkcjonować.

Szkolenia z Excela , FB
Office 2019 Professional Plus , Windows 10 x64
Pozdrawiam, były mkkk23 teraz Marecki.
ID posta: 364301 Skopiuj do schowka
 
 
Morusek 
Starszy Forumowicz


Wersja: Win Office 2013
Posty: 48
Wysłany: 15-03-2019, 13:57   

Niestety w finałowym pliku dane się "rozjeżdżają" - powodem są 2 wiersze stanowiące numerację stron.
Bedę wdzięczny za sugestie jak automatycznie usunąć te wiersze -a jest ich kilkaset...
Po ich usunięciu - plik będzie gotowy do analizy.
ID posta: 364302 Skopiuj do schowka
 
 
Marecki 
Excel Expert



Wersja: Win Office 2019
Pomógł: 2079 razy
Posty: 6858
Wysłany: 15-03-2019, 14:07   

Bez pliku nic więcej nie zdziałam.
Co jest innego w pliku , który mi wysłałeś ?
Dane miały być odzwierciedleniem pliku oryginalnego, ale skoro piszesz że coś nie działa to znaczy że tak nie jest.
Wejdź w edytor PQ, przeanalizuj wykonane kroki to dojdziesz co jest nie tak.
_________________
Hardware - ta część komputera, którą można kopnąć kiedy software przestanie funkcjonować.

Szkolenia z Excela , FB
Office 2019 Professional Plus , Windows 10 x64
Pozdrawiam, były mkkk23 teraz Marecki.
ID posta: 364303 Skopiuj do schowka
 
 
Morusek 
Starszy Forumowicz


Wersja: Win Office 2013
Posty: 48
Wysłany: 15-03-2019, 14:29   

Docelowy plik ma ponad 300 stron ale ten sam układ kolumn.
Musiałem coś skopać - na spokojnie się temu przyjrzę.
ID posta: 364305 Skopiuj do schowka
 
 
Morusek 
Starszy Forumowicz


Wersja: Win Office 2013
Posty: 48
Wysłany: 15-03-2019, 20:02   

Na spokojnie zrobiłem wszystko jeszcze raz.
Tym razem Power Query pięknie zaimportował wszystkie wiersze w ilości zgodnej z plikiem PDF
Wierszy jest prawie 20 tys. Wydawało się OK...
Niestety w około 1200 wierszach występuje przesunięcie danych z kolumn z prawej strony w kierunku kolumny "Nazwa" (lub ingerencja w treść tej kolumny) - foto
Odnoszę wrażenie że to dane z kolumny "NAZWA" są przyczyną tych błędów, gdyż treść tej kolumny stanowi w moim pliku od 1 do kilkunastu "wyrazów" oddzielonych spacją (w załączonym przykładzie to 4 "wyrazy").
Pozostałe kolumny stanowią w zasadzie pojedynczy ciąg tekstu.

Próbowałem jeszcze innego sposobu
Mianowicie skopiowania całej tabeli w PDF do Excela poprzez KREATORA IMPORTU TEKSTU.
Następnie chciałem wykorzystać ramki tabel jako ograniczniki - niestety program nie zaakceptował tej formy ograniczników i zabawa się skończyła.
Tutaj także kolumna "Nazwa" komplikuje sprawę.

Przykład.jpg
Plik ściągnięto 6 raz(y) 83.41 KB

  
ID posta: 364310 Skopiuj do schowka
 
 
Bill Szysz 
Excel Expert


Wersja: Win Office 365
Pomógł: 785 razy
Posty: 3274
Wysłany: 15-03-2019, 20:45   

Morusek, użyj Power BI Desktop... jest tam opcja importowania z pdf (beta). powinno dobrze zaimportować. gdybyś miał kłopoty z napisaniem zapytania to po prostu wklej ten kod (poniżej) do edytora zaawansowanego w Power BI Desktop.
Kod:
let
    Źródło = Pdf.Tables(File.Contents("C:\Users\Zbigniew\Downloads\Stan magazynu - export pdf.pdf")),
    #"Przefiltrowano wiersze" = Table.SelectRows(Źródło, each Text.StartsWith([Name], "Table")),
    #"Usunięto inne kolumny" = Table.Combine(Table.SelectColumns(#"Przefiltrowano wiersze",{"Data"})[Data]),
    #"Nagłówki o podwyższonym poziomie" = Table.PromoteHeaders(#"Usunięto inne kolumny", [PromoteAllScalars=true]),
    #"Dodano prefiks" = Table.TransformColumns(#"Nagłówki o podwyższonym poziomie", {{"Kod EAN", each "'" & _, type text}})
in
    #"Dodano prefiks"

Gdy juz będziesz miał swoje dane w PBI to w okienku PQ (w PBI) po lewej stronie jest taka tabelka... jeśli ją klikniesz to jest tam opcja "kopiuj całą tabelę".
Tak skopiowaną tabelę po prostu wklejasz do arkusza excela i powinno byc ok.
_________________
Szkolenia z Power Query!!!

Pozdrawiam, były szbill62 aktualnie Bill Szysz
ID posta: 364313 Skopiuj do schowka
 
 
Morusek 
Starszy Forumowicz


Wersja: Win Office 2013
Posty: 48
Wysłany: 15-03-2019, 21:22   

Ściągnąłem tę aplikację (bez rejestracji) ale nie widzę możliwości importu z pliku pdf.
Być może wersja płatna ją posiada...
ID posta: 364314 Skopiuj do schowka
 
 
Bill Szysz 
Excel Expert


Wersja: Win Office 365
Pomógł: 785 razy
Posty: 3274
Wysłany: 15-03-2019, 21:39   

Morusek, to bezpłatna aplikacja... czyli nie ma wersji pro.
Plik --> Opcje i ustawienia --> Opcje --> Funkcje w wersji zapoznawczej... i zaptaszkuj to co Ci potrzebne
_________________
Szkolenia z Power Query!!!

Pozdrawiam, były szbill62 aktualnie Bill Szysz
ID posta: 364315 Skopiuj do schowka
 
 
Marecki 
Excel Expert



Wersja: Win Office 2019
Pomógł: 2079 razy
Posty: 6858
Wysłany: 16-03-2019, 10:50   

Bill Szysz napisał/a:
czyli nie ma wersji pro
A jednak jest, ale nie jest to potrzebne dla w/w kroków, czyli do rozwiązania problemu Moruska. ]

Bill Szysz na pliku Stan magazynu - export pdf.pdf wszystko jest ok - ładnie sobie poradził PB z kolumnami, ale na pliku który dostałem już wychodzi przesunięcie danych do innych kolumn - patrz foto PB1.

Dla pliku , który otrzymałem na PW zapytanie PQ dało radę (nie udostępnię go bo nie wiem czy mogę) - zresztą nie ma takiej potrzeby skoro zapytanie PQ na nim działa.

Niestety pliki PDF mają taką niewdzięczną strukturę, jeśli chodzi o pobieranie z nich danych.
Tak jak pisałem wcześniej - bez pliku oryginalnego za wiele nie zdziałamy.

PB.jpg
Plik ściągnięto 39 raz(y) 8.59 KB

PB1.jpg
Plik ściągnięto 39 raz(y) 8.42 KB

_________________
Hardware - ta część komputera, którą można kopnąć kiedy software przestanie funkcjonować.

Szkolenia z Excela , FB
Office 2019 Professional Plus , Windows 10 x64
Pozdrawiam, były mkkk23 teraz Marecki.
ID posta: 364329 Skopiuj do schowka
 
 
Morusek 
Starszy Forumowicz


Wersja: Win Office 2013
Posty: 48
Wysłany: 16-03-2019, 23:07   

Bill Szysz napisał/a:
Morusek, to bezpłatna aplikacja... czyli nie ma wersji pro.
Plik --> Opcje i ustawienia --> Opcje --> Funkcje w wersji zapoznawczej... i zaptaszkuj to co Ci potrzebne


Faktycznie - w PBD można importować PDF-y tylko trzeba zmienić ustawienia.
Mój PDF zawiera 302 strony - w PBD każdą stronę trzeba osobno zaptaszkować aby załadować - nie można wybrać wszystkich na raz...
Ale nawet przy zaznaczonych kilkunastu stronach program się zawiesza podczas importu...
Dla zaznaczonej jednej strony program także generuje przesunięcia..


Nadal szukam rozwiązania...
Swoją drogą to żenujące, że nie ma odpowiednich standardów konwersji tych formatów.
Zapewne ten problem miało wielu użytkowników.

Marecki i Bill Szysz - dzięki za poświęcony czas :beer
  
ID posta: 364364 Skopiuj do schowka
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Theme xandgreen created by spleen& Programosy modified v0.3 by warna
Opieka techniczna www.marketingNET.pl

Archiwum

Strona używa plików cookies.

Kliknij tutaj, żeby dowiedzieć się jaki jest cel używania cookies oraz jak zmienić ustawienia cookie w przeglądarce.
Korzystając ze strony użytkownik wyraża zgodę na używanie plików cookies, zgodnie z bieżącymi ustawieniami przeglądarki.
Sprawdź, w jaki sposób przetwarzamy dane osobowe