Marek Zadęcki

Marek Zadęcki pracownik biurowy i
kadrowy

Temat: Wczytywanie danych z tabel Worda lub dokumentów pdf

Witajcie. Znajomy twierdzi, że niemożliwym jest automatyczne wczytanie danych wyłącznie z tabel Worda do Excela, gdyż "prócz samych typowych tabel (nagłówki i dane) występuje (poza tebelą) tekst".
Na "piechotę" - sprawdziłem w przypadku dokumentów Worda - sprawa jest banalnie prosta. Schody zaczynają się w przypadku dokumentów pdf. Tutaj widzę wyjście - konwersję do Worda a dopiero potem do Excela. A może znacie inny szybszy sposób?
Poważny PROBLEM pojawia się, gdy zamiast kilkunastu tabel (co można zrobić na piechotę) tabel jest kilka tysięcy i co więcej są one wielostronicowe... Moje pytanie brzmi: Czy jest możliwość (a jeśli tak to w jaki sposób - bardzo proszę o wskazanie linku do strony z rozwiązaniem lub przesłanie kodu) zmusić Excela do działania za pomocą makra:
1. Wskazuję katalog z plikami, z których mają być wczytywane tabele
2.W ramach każdego pliku następuje "skanowanie" dokumentu i oddzielenia obszaru z tekstem od obszaru tabeli (w tym obszarze może być tekst i/lub dane liczbowe)
2. Skopiowanie wyłącznie obszaru/ów tabeli i wiernego wklejenia jej do Excela.
3. po wykonaniu operacji pojawia się komunikat: "Przeskanowano łącznie ... plików. Skopiowano ... tabel" OK.
4. kolejny komunikat: "Czy chcesz wczytać pliki z innego katalogu?" TAK/NIE
5. jeśli NIE zakończenie działania makra.
Tak na szybko przyszedł mi do głowy pomysł z makrem. Założenia:
1. pliki są tego samego rodzaju tzn. mają to samo rozszerzenie (jak Word to *.doc albo *.docx)
2. pliki mają tą samą strukturę (tzn. taką samą liczbę kolumn)
3. poszczególne obszary wklejanych tabel są od siebie oddzielone 1 wierszem.

Jeśli jeszcze jakieś założenia pominąłem - proszę o podpowiedź. Potraktowałem stwierdzenie mojego znajomego jako wyzwanie i chciałbym poszerzyć swoje umiejętności. Jeśli możecie mi pomóc - z góry dziękuję.
Artur D.

Artur D. Solution Architect,
Atos IT Services Sp.
z o.o.

Temat: Wczytywanie danych z tabel Worda lub dokumentów pdf

W przypadku importu dokumentów Word:

http://www.excelandpowerbi.com/?p=201

Przy czym ta metoda wymaga zrozumienia działania kodu M, ponieważ domyślnie importuje jedną tabelę.

Druga opcja to zapis dokumentu word jako html/htm i import poprzez Get&Transform - jest nawet łatwiej w tym wypadku

W wypadku importu pdf - jeżeli nie jest to obraz powstały w wyniku skanowania:

Otwarcie w word - zapis jako docx lub htm i import poprzez Get&Transform
Marek Zadęcki

Marek Zadęcki pracownik biurowy i
kadrowy

Temat: Wczytywanie danych z tabel Worda lub dokumentów pdf

Bardzo dziękuję za podpowiedź. Jest to wyjście. Tylko... analiza kodu zajmie mi dość długi czas. Szczerze mówiąc nie jestem biegły w programowaniu.
Kolejny problem - przypuszczam, że dokumenty pdf są skanami oryginalnych pism.
Jeśli jeszcze ktoś z Was ma pomysł na rozwiązanie problemu - proszę o podpowiedź.
Dawid Marcisz

Dawid Marcisz Kierownik zmiany /
Kierownik produkcji,
TEVA Operations P...

Temat: Wczytywanie danych z tabel Worda lub dokumentów pdf

Autorze wątku :) nic nie przychodzi łatwo, a oczekiwanie na gotowca bez wkładu własnego to trochę negowanie idei istnienia takich grup - forów i wzajemnej pomocy. Pozdrawiam i życzę powodzenia! PS. OCR tyle w temacie.Ten post został edytowany przez Autora dnia 21.12.16 o godzinie 21:37
Marek Zadęcki

Marek Zadęcki pracownik biurowy i
kadrowy

Temat: Wczytywanie danych z tabel Worda lub dokumentów pdf

Dawid M.:
Autorze wątku :) nic nie przychodzi łatwo, a oczekiwanie na gotowca bez wkładu własnego to trochę negowanie idei istnienia takich grup - forów i wzajemnej pomocy. Pozdrawiam i życzę powodzenia! PS. OCR tyle w temacie.

Dawidzie - w pierwszej kolejności przyjmij najserdeczniejsze życzenia z okazji Świąt Bożego Narodzenia.
Pozwolę sobie na małą dygresję - gdyby człowiek nie dzielił się wiedzą i umiejętnościami z innymi tkwilibyśmy wciąż w mrokach Średniowiecza. Wszelki postęp zaczynał się od wskazania gotowego rozwiązania, które w kolejnych etapach było rozwijane i udoskonalane.
Zadałem pytanie z prostego powodu - nie umiem rozwikłać problemu.
Jeśli jest na tym forum osoba, która zna rozwiązanie i chciałaby się nim podzielić - proszę o konkretny kod z opisem działania (by takim osobom jak ja umożliwić zrozumienie).
Sądzę, że nie ma sensu mnożyć wypowiedzi, które nic wspólnego nie mają z rozwiązaniem postawionego problemu.
Proszę mnie poprawić jeśli się mylę: "Ideą tego forum jest bezpłatne dzielenie się wiedzą i umiejętnościami z innymi".
Andy L.

Andy L. ITM, VUB

Temat: Wczytywanie danych z tabel Worda lub dokumentów pdf

Wyrażę prywatną opinię o tej idei: Dzielenie się ścieżką / metodą prowadzącą do rozwiązania a nie tzw. gotowcem. W przypadku gotowca jakim (...) jesteś takim (...) pozostaniesz. :)))Ten post został edytowany przez Autora dnia 22.12.16 o godzinie 20:36
Sławomir Broda

Sławomir Broda VBA, Excel, Access,
SAP i wszystko
związane z
automatyzac...

Temat: Wczytywanie danych z tabel Worda lub dokumentów pdf

Marek Z.:
Dawid M.:
Autorze wątku :) nic nie przychodzi łatwo, a oczekiwanie na gotowca bez wkładu własnego to trochę negowanie idei istnienia takich grup - forów i wzajemnej pomocy. Pozdrawiam i życzę powodzenia! PS. OCR tyle w temacie.
Proszę mnie poprawić jeśli się mylę: "Ideą tego forum jest bezpłatne dzielenie się wiedzą i umiejętnościami z innymi".
Już poprawiam. Ideą tego forum jest pomoc w rozwiązywaniu problemów i WYMIANA wiedzą, a nie pisanie na życzenie osób Pana pokroju gotowych programów.
Pan wkleja specyfikację w pierwszym poście i liczy na jakiegoś nowego frajera, który odwali za Pana robotę, którą pewnie wniesie Pan do firmy jako efekt swojej ciężkiej pracy.Ten post został edytowany przez Autora dnia 23.12.16 o godzinie 10:24
Marek Zadęcki

Marek Zadęcki pracownik biurowy i
kadrowy

Temat: Wczytywanie danych z tabel Worda lub dokumentów pdf

Sławomir B.:
Już poprawiam. Ideą tego forum jest pomoc w rozwiązywaniu problemów i WYMIANA wiedzą, a nie pisanie na życzenie osób Pana pokroju gotowych programów.
Pan wkleja specyfikację w pierwszym poście i liczy na jakiegoś nowego frajera, który odwali za Pana robotę, którą pewnie wniesie Pan do firmy jako efekt swojej ciężkiej pracy.

Miałem nie odpowiadać na zaczepki jednak w tym wypadku zrobię wyjątek.
Do firmy nie potrzeba mi już gotowych programów napisanych na zasadzie wymiany barterowej .
Nie szukam "nowego frajera" (wypraszam sobie takie słownictwo, które uwłacza wszystkim szanującym się forumowiczom).
Przypuszczam, że Pan Sławek NIE ZNA ROZWIĄZANIA problemu i na siłę szuka tematu zastępczego. Zastanawiam się tylko CO CHCE OSIĄGNĄĆ?
Sławomir Broda

Sławomir Broda VBA, Excel, Access,
SAP i wszystko
związane z
automatyzac...

Temat: Wczytywanie danych z tabel Worda lub dokumentów pdf

Marek Z.:
Sławomir B.:
Już poprawiam. Ideą tego forum jest pomoc w rozwiązywaniu problemów i WYMIANA wiedzą, a nie pisanie na życzenie osób Pana pokroju gotowych programów.
Pan wkleja specyfikację w pierwszym poście i liczy na jakiegoś nowego frajera, który odwali za Pana robotę, którą pewnie wniesie Pan do firmy jako efekt swojej ciężkiej pracy.

Miałem nie odpowiadać na zaczepki jednak w tym wypadku zrobię wyjątek.
Cóż za wstrzemięźliwość.
Do firmy nie potrzeba mi już gotowych programów napisanych na zasadzie wymiany barterowej .
Mogę pogrzebać w mailach i przypomnieć wynik naszej ostatniej "wymiany barterowej". Zainteresowany?
Nie szukam "nowego frajera" (wypraszam sobie takie słownictwo, które uwłacza wszystkim szanującym się forumowiczom).
"Nowy frajer" to po prostu osoba, która jeszcze Pana nie zna. Nikomu ona nie uwłacza.
Przypuszczam, że Pan Sławek NIE ZNA ROZWIĄZANIA problemu i na
Pewnie, że nie zna, bo zakończył czytanie Pana postu, po przeczytaniu nazwiska wiedząc co w nim będzie.
siłę szuka tematu zastępczego. Zastanawiam się tylko CO CHCE OSIĄGNĄĆ?
Wolność wyznania dla czarnoskórych misiów koala.Ten post został edytowany przez Autora dnia 28.12.16 o godzinie 16:51
Marek Zadęcki

Marek Zadęcki pracownik biurowy i
kadrowy

Temat: Wczytywanie danych z tabel Worda lub dokumentów pdf

Sławomir B.:
Mogę pogrzebać w mailach i przypomnieć wynik naszej ostatniej "wymiany barterowej". Zainteresowany?

Odpowiem ponieważ nie mam nic do ukrycia. Skoro upublicznienie naszych ustaleń ma Panu pomóc - wyrażam zgodę na publikację. Ja ze swej strony również opublikuję wynik mojej wykonanej dla Pana pracy.Ten post został edytowany przez Autora dnia 29.12.16 o godzinie 23:29
Sławomir Broda

Sławomir Broda VBA, Excel, Access,
SAP i wszystko
związane z
automatyzac...

Temat: Wczytywanie danych z tabel Worda lub dokumentów pdf

Marek Z.:
Sławomir B.:
Mogę pogrzebać w mailach i przypomnieć wynik naszej ostatniej "wymiany barterowej". Zainteresowany?

Odpowiem ponieważ nie mam nic do ukrycia. Skoro upublicznienie naszych ustaleń ma Panu pomóc - wyrażam zgodę na publikację. Ja ze swej strony również opublikuję wynik mojej wykonanej dla Pana pracy.
Pani się znów ośmiesza. Z mojej strony dostał Pan w pełni działający program mojego autorstwa.
Wyniki Pana "pracy" to bezmyślne skopiowanie teksty z internetu.
Marek Zadęcki

Marek Zadęcki pracownik biurowy i
kadrowy

Temat: Wczytywanie danych z tabel Worda lub dokumentów pdf

Sławomir B.:

Pani się znów ośmiesza. Z mojej strony dostał Pan w pełni działający program mojego autorstwa.
Wyniki Pana "pracy" to bezmyślne skopiowanie teksty z internetu.

Nie będę zniżał się do poziomu Pana wypowiedzi. Fakt - otrzymałem funkcjonalny program i nie kryłem, że nie byłem jego autorem. Wypracowanie napisałem za pana. Z tego co wiem opatrzył je Pan swoim imieniem i nazwiskiem. Zamiast 4-5 stron wyszło ponad 20.
Bezmyślnie skopiować tekst z internetu potrafi każdy. Ja posiłkowałem się oryginalnym regulaminem wykorzystywanym w Telekomunikacji Polskiej. Przepisałem najbardziej odpowiednie fragmenty. Nie przypuszczałem, że stworzono go w oparciu o już istniejący dokument.
Sławomir Broda

Sławomir Broda VBA, Excel, Access,
SAP i wszystko
związane z
automatyzac...

Temat: Wczytywanie danych z tabel Worda lub dokumentów pdf

Marek Z.:
Sławomir B.:

Pani się znów ośmiesza. Z mojej strony dostał Pan w pełni działający program mojego autorstwa.
Wyniki Pana "pracy" to bezmyślne skopiowanie teksty z internetu.

Nie będę zniżał się do poziomu Pana wypowiedzi. Fakt - otrzymałem funkcjonalny program i nie kryłem, że nie byłem
Ale co mnie to obchodzi? Dostał Pan wszystkie prawa do niego i mógł Pan sobie robić z nim co się Panu podobało.
jego autorem. Wypracowanie napisałem za pana. Z tego co wiem
Myli Pan pisanie (pracę twórczą) z przepisywaniem tak samo jak myli Pan pomoc w rozwiązaniu problemu na forum z odwalaniem za Pana całej roboty przez kogoś innego.
opatrzył je Pan swoim imieniem i nazwiskiem. Zamiast 4-5 stron wyszło ponad 20.
I co w związku z tym? Nadal była to zwykła kradzież własności intelektualnej z internetu.
Bezmyślnie skopiować tekst z internetu potrafi każdy. Ja posiłkowałem się oryginalnym regulaminem wykorzystywanym w Telekomunikacji Polskiej. Przepisałem najbardziej odpowiednie fragmenty. Nie przypuszczałem, że stworzono go w oparciu o już istniejący dokument.
A Pana zadaniem było NAPISANIE autorskiej pracy, a nie skopiowanie do niej fragmentów z internetu podmieniając nazwy firmy, której dotyczyła praca.
Marek Zadęcki

Marek Zadęcki pracownik biurowy i
kadrowy

Temat: Wczytywanie danych z tabel Worda lub dokumentów pdf

Gdyby płacono za bezczelność - Sławomir B. byłby teraz milionerem. Mam już dość ludzi, którzy są typowymi wampirami energetycznymi, pławią się we własnej złości i prowokują innych.
Skończyłem dyskusję na temat, który nie ma nic wspólnego z wątkiem.
Sławomir Broda

Sławomir Broda VBA, Excel, Access,
SAP i wszystko
związane z
automatyzac...

Temat: Wczytywanie danych z tabel Worda lub dokumentów pdf

Marek Z.:
Gdyby płacono za bezczelność - Sławomir B. byłby teraz milionerem. Mam już dość ludzi, którzy są typowymi wampirami
Ujawnianie drobnych machlojek forumowego oszusta to faktycznie bezczelność.
energetycznymi, pławią się we własnej złości i prowokują innych.
Bełkot.
Skończyłem dyskusję na temat, który nie ma nic wspólnego z wątkiem.
Nie należało jej zaczynać.
Maciej Radzki

Maciej Radzki Report Expert Office
Lead (Associate Line
Manager)

Temat: Wczytywanie danych z tabel Worda lub dokumentów pdf

Ludzie, spokojnie. Nie zaśmiecajcie ciekawego wątku przekomarzankami.

Co do importu zawartości PDFa do Worda ja w kodzie korzystałem z pomocy innego programu: GhostScript. Niestety sporo tam dłubania.

Co do OCR: dosłownie oznacza to Optical Character Recognition. Aplikacje skanerów z tego korzystają, aby rozpoznawać czcionkę i wysyłać ją np. do Worda.
Nie mniej jednak:
a) Kod korzystałby z pomocy innej aplikacji (tak jak GhostScript)
b) Osoba korzystająca z narzędzia musi mieć te samą aplikację zainstalowaną.

Dodatkowo można użyć Adobe Acrobat Standard, ale nie jestem pewien czy poradzi on sobie ze skanowanymi dokumentami PDF. Właściwie w tym przypadku to tylko OCR wg mnie pomoże...

Daj znać czy masz jakąś aplikację do OCR.
Andy L.

Andy L. ITM, VUB

Temat: Wczytywanie danych z tabel Worda lub dokumentów pdf

Adobe Acrobat Pro posiada OCR, który świetnie radzi sobie z językiem polskim w pdf-ach obrazkowych. Nie wiem jak z wersją Standard bo jej nigdy nie miałem :)
Można również użyć Abbyy FineReader np.: 12, który jest kombajnem do skanowania, OCR-owania i transformacji dokumentów w tym pdf.
Do wyboru, do koloru :)
Marek Zadęcki

Marek Zadęcki pracownik biurowy i
kadrowy

Temat: Wczytywanie danych z tabel Worda lub dokumentów pdf

Dziękuję za odpowiedzi. Jeśli chodzi o Acrobat Reader wersja DC polska (bezpłatna) zniekształca polskie znaki. Co do Ghost Reader - przydatne narzędzie ale... cały problem polega na kodzie makra w Excelu.
Czy moglibyście przedstawić swoje propozycje?
Znalazłem w sieci plik Excela 2016 z następującym kodem:

let
Source = File.Contents("C:\Users\FS\Downloads\Excel\Tabela Word do Excel\Tabele.docx"),

ReplaceTag = (CurrentTag, NewTag, MyText) =>
let
// Replace all CurrentTag with NewTag,
Pos = Text.PositionOf(MyText, CurrentTag),
EndPos = Text.PositionOf(Text.Range(MyText, Pos),">"),
NewText = try Text.ReplaceRange(MyText, Pos, EndPos+1, NewTag) otherwise MyText
in
if (Pos = -1) then
NewText
else
@ReplaceTag(CurrentTag, NewTag, NewText),

// Extract the document.xml from the Word docx file using DecompressZIP approach from previous blog post

MyXML = DecompressFiles(Source, 0, "word/document.xml", ""),

// Convert the output into lines of text
#"Imported Text" = Table.FromColumns({Lines.FromBinary(MyXML,null,null,1252)}),

// Locate the table XML tags that identify the tabular content within the Word XML and replace with temporary placeholders

ReplaceTableStartTag = Table.ReplaceValue(#"Imported Text","<w:tbl>","||TABLE START||",Replacer.ReplaceText,{"Column1"}),
ReplaceTableEndTag = Table.ReplaceValue(ReplaceTableStartTag,"</w:tbl>","||TABLE END||",Replacer.ReplaceText,{"Column1"}),

ReplaceRowStartTag = Table.ReplaceValue(ReplaceTableEndTag,"<w:tr>","||ROW START||",Replacer.ReplaceText,{"Column1"}),
ReplaceRowEndTag = Table.ReplaceValue(ReplaceRowStartTag,"</w:tr>","||ROW END||",Replacer.ReplaceText,{"Column1"}),

ReplaceCellStartTag = Table.ReplaceValue(ReplaceRowEndTag,"<w:tc>","||CELL START||",Replacer.ReplaceText,{"Column1"}),
ReplaceCellEndTag = Table.ReplaceValue(ReplaceCellStartTag,"</w:tc>","||CELL END||",Replacer.ReplaceText,{"Column1"}),

//Some Row Start tags have attributes and need to be handled using ReplaceTag function
#"Added Custom" = Table.AddColumn(ReplaceCellEndTag, "Custom", each ReplaceTag("<w:tr ", "||ROW START||", [Column1])),
#"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Column1"}),
#"Renamed Columns" = Table.RenameColumns(#"Removed Columns",{{"Custom", "Column1"}}),

//Borrowed code that removes all XML tags
//https://social.technet.microsoft.com/Forums/en-US/7ec64d6d-c3fc-4110-94c7-2e0087171475/how-to-remove-html-tags-from-a-column?forum=powerquery

ReplaceStr = Table.ReplaceValue(#"Renamed Columns","><",">,<",Replacer.ReplaceText,{"Column1"}),
ListsCol = Table.AddColumn(ReplaceStr, "ID", each
Text.Split(Text.Combine(List.Alternate(Text.SplitAny([Column1],"<>"),1,1,1),","),",")),
ExpCol = Table.ExpandListColumn(ListsCol, "ID"),
FilterID = Table.SelectRows(ExpCol, each ([ID] <> "")),
TheEnd = Table.SelectColumns(FilterID,{"ID"}),

//Now turn our special tags back into regular HTML table tags

aReplaceStr0 = Table.ReplaceValue(TheEnd,"||TABLE START||","<table><tr><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th></tr>",Replacer.ReplaceText,{"ID"}),
aReplaceStr1 = Table.ReplaceValue(aReplaceStr0,"||TABLE END||","</table>",Replacer.ReplaceText,{"ID"}),

aReplaceStr2 = Table.ReplaceValue(aReplaceStr1,"||ROW START||","<tr>",Replacer.ReplaceText,{"ID"}),
aReplaceStr3 = Table.ReplaceValue(aReplaceStr2,"||ROW END||","</tr>",Replacer.ReplaceText,{"ID"}),

aReplaceStr4 = Table.ReplaceValue(aReplaceStr3,"||CELL START||","<td>",Replacer.ReplaceText,{"ID"}),
aReplaceStr5 = Table.ReplaceValue(aReplaceStr4,"||CELL END||","</td>",Replacer.ReplaceText,{"ID"}),

OutputTXT = List.Accumulate(Table.ToList(aReplaceStr5), "", (a,b) => a & b),

// Tell Power Query to parse it as HTML

Output = Web.Page( OutputTXT),
// Filter to just tables
#"Filtered Rows" = Table.SelectRows(Output, each ([Source] = "Table")),

// Add an index to number the tables
#"Added Index" = Table.AddIndexColumn(#"Filtered Rows", "Table No.", 1, 1),
#"Removed Other Columns" = Table.SelectColumns(#"Added Index",{"Table No.", "Data"}),
Data = #"Removed Other Columns"{0}[Data],
#"Promoted Headers" = Table.PromoteHeaders(Data),
#"Removed Columns1" = Table.RemoveColumns(#"Promoted Headers",{""})
in
#"Removed Columns1"


Do importu tabeli z 1 pliku Worda sprawdza się idealnie.
Bardzo proszę o podanie jak przerobić go aby była możliwość wczytywania wielu plików umieszczonych we wskazanym katalogu.



Wyślij zaproszenie do