Import multiple Microsoft Word forms in Excel using PowerQuery


Disclaimer: Acest articol are doar un caracter de studiu și nu își propune să înlocuiască în nici un fel aplicațiile programatice sau paginile și aplicațiile web dedicate. Este doar ca exemplu de import a unor date din Word în Excel.

 

Acest articol este destinat utilizatorilor de Office care doresc să colecteze informații nestandardizate din procesele lor de afaceri. Știu, este destul de dificil să faci formulare în Word, dar cred că decât să faci șabloane în Word cu puncte-puncte pe care să le listezi și să le completeze cineva manual, este mult mai util în primă fază să faci un formular cu niște câmpuri simple în Word.

Pentru a realiza un astfel de formular trebuie să aveți activat meniul Developer din care intrați în Design mode și puteți introduce diferite tipuri de câmpuri din secțiunea: Controls. Atenție, pentru o identificare cât mai exactă a datelor care vor fi salvate în importul brut este recomandat să aveți niște convenții de notare predefinite și să folosiți eventual tag-uri. Acest articol este cu tag-uri.

Exemplu despre modul în care se introduc tag-urile:

Documentul pentru acest exemplu poate fi descărcat de aici.

Șablonul poate fi partajat în rețea în mod clasic sau într-un DFS sau într-un SharePoint, OneDrive, Google Drive, Dropbox… sau pe mail.

Fiecare user completează formularul și îl salvează într-o astfel de locație centralizată.

Pentru a putea prelua datele din toate fișierele am utilizat pentru acest exemplu un script Power Query în care am inclus funcția Decompress de la autorul KenR (How to extract data from a ZIP file using just Power Query – http://www.excelandpowerbi.com/?p=155). Fiecare document Word este în fapt un document ZIP care conține mai multe fișiere XML și nu numai. Pentru a extrage datele din Word avem nevoie de acces la fișierul document.xml pe care îl parsăm după o serie de cuvinte cheie.

Codul sursă pentru script disponibil si in fisierul Excel de exemplu este:

Rezultatul final in funcție de numărul de fișiere din folder și subfoldere poate arăta în felul următor:

 

Cum puteți testa:

  1. Descărcați șablonul Word.
  2. Completați câteva documente pe baza șablonului și salvați-le în aceeași locație.
  3. Descărcați și Deschideți fisierul Excel și accesați Query editor după care modificați valoarea de la Source.
  4. Apăsați în Query editor opțiunea Close and Load
  5. Ar trebui să aveți tabelul cu date.

Sper să vă fie util!

Reclame

9 gânduri despre “Import multiple Microsoft Word forms in Excel using PowerQuery

  1. Misto ideia. Pot sa verific proiectele daca lungimile coincid la parti desenate cu parti scrise. Doara ca nu mia iesit, imi da cu eroare :).

    Apreciază

      • Mda, mam aruncat inainte :). Credeam ca poti sa extragi orice continut din word. Pe mine mar iteresa tabelelel. Dar nu mi-a iesit, pentru ca nu am creat acele campuri.

        Apreciază

  2. Alexandru vezi în link-ul cu funcția. Pe acel site este si un step-by-step fix pe tabele. Funcția este bestială dar rezultatul în excel nu este atât de bun. De aceea am propus modelul cu fields.

    Apreciază

  3. O alternativă este să imporți o schemă xsd în word și să legi controalele pe care le folosești în formular la câmpurile schemei. Rezultatul va rămâne tot în interiorul zip-ului, dar ai mai mult control asupra câmpurilor.

    Personal prefer ca formularul să fie în Excel și exportul să fie făcut într-un fișier xml.
    Această abordare are mai multe avantaje:
    – Permite structuri mai complexe ale datelor, de exemplu o comandă poate fi împărțită în antet (elemente unice) și listă articole (element de tip listă) ce pot fi apoi importate ca două tabele cu o relație unu la multe
    – Permite importul oriunde ai nevoie să prelucrezi datele: Access, SQL, alt Excel…
    – Dimeniuni ridicol de mici ale fișierelor de corespondență: o comandă cu 20 de articole are în jur de 2-3kb!

    Apreciat de 1 persoană

      • Cu xml în word nu prea am făcut mai nimic… doar am testat câteva chestiuni de curiozitate. Totuși din ceea ce am citit, consider că sunt posibile cel puțin următoarele abordări:
        1. o primă abordare (cred – nu m-am jucat prea mult cu aceasta) e cu XML DOM. Teoretic poți citi și scrie (prin cod!) orice xml vrei.
        2. După modelul de aici (https://msdn.microsoft.com/en-us/library/bb398244.aspx) poți crea un xml custom, stocat în interiorul fișierului word la care (tot prin cod) să legi controalele din formular.
        3. (O variantă de fapt a punctului 2 care e mai ușor de pus în practică dar simplifică destul de mult funcționalitatea) utilizezi add-in acesta gratuit (https://appsource.microsoft.com/en-us/product/office/WA104379118?src=office&tab=Overview) și mapezi câmpurile xml la controale.

        Cu 1 și 2 e mai mult de muncă dar rămâne avantajul flexibilității… poți gândi structuri mai complexe, poți schimba regulile de validare fără să schimbi versiunea fișierului word, etc.
        3 cred că e util atunci când utilizezi fișierul word ca un raport dinamic, un raport la care poți face refresh.

        Apreciat de 1 persoană

  4. Mulțumim frumos Ciprian. Dar după cum mă știi eu sunt genul as-standard-as-possible. Fără cod compilat, fără prea multe bătăi de cap pentru end-user.
    Scopul meu ar fi să ajung la o funcție căreia sa-i specific ramura xml din Word si sa imi dea direct valoarea. Ar simplifica scriptul Power Query cu câteva linii. Dar studiem. :)

    Apreciază

    • Ți-am trimis un fișiere word (de fapt al tău :) ) în care am legat controalele existente la câmpurile unui xml înglobat în fișier. Nu are cod, dar cel puțin dacă modific opțiunile pentru tip concediu în schemă se modifică și în fișier.

      Apreciază

Lasă un răspuns

Completează mai jos detaliile tale sau dă clic pe un icon pentru a te autentifica:

Logo WordPress.com

Comentezi folosind contul tău WordPress.com. Dezautentificare /  Schimbă )

Fotografie Google+

Comentezi folosind contul tău Google+. Dezautentificare /  Schimbă )

Poză Twitter

Comentezi folosind contul tău Twitter. Dezautentificare /  Schimbă )

Fotografie Facebook

Comentezi folosind contul tău Facebook. Dezautentificare /  Schimbă )

w

Conectare la %s