Articolul privind Formulare a arătat modul în care creați un formular în Microsoft Word 2007, dar nu a arătat și modul de colectare a datelor… după ce utilizatorul completează datele și salvează cu numele său fișierul, este rugat să-l trimită prin e-mail (documentul nostru este un .docx, dar așa cum spuneam în articolul trecut se poate folosi și în Word 2003). De aici urmează colectarea datelor.
Există mai multe variante… Să le vedem pe rând, fiecare cu părțile bune și rele… Aveți aici fișierele de lucru.
Extragerea datelor din fișierul .doc într-un fișier .txt
Problema constă în transformarea informațiilor din fișierul .doc în .txt doar cu datele din formulare. Pentru asta… executați Office Button, Word Options, Advanced și selectați Save form data as delimited text file. La salvare se va obține un fișier text cu datele separate prin punct și virgulă (în cazul de față).
Probleme. Metoda aleasă mai sus crează foarte ușor fișierele .txt cu date, dar recuperarea ulterioară a tuturor informațiilor din fiecare .txt într-un singur fișier e mai anevoioasă.
Extragerea datelor din fiecare fișier .doc și crearea unui singur fișier .txt
Pentru asta trebuie utilizat un macro, al cărui cod este prezentat în continuare, dar mai întâi trebuie să vă creați două fișiere de lucru Sursa.txt și Destinatie.txt.
‘
‘ ExtractDataForm Macro
‘ Extragerea de date din formulare .doc în fisier .txt
‘
Sub ExtractDataForm()
Dim DocList As String
Dim DocDir As String
Dim Sursa As Document
Dim Destinatie As Document
Dim fDialog As FileDialog
Set fDialog = Application.FileDialog(msoFileDialogFolderPicker)
On Error GoTo err_FolderContents
With fDialog
.Title = “Selectati directorul care contine formularele completate si apasati OK”
.AllowMultiSelect = False
.InitialView = msoFileDialogViewList
If .Show <> -1 Then
MsgBox “Anulat de utilizator”
Exit Sub
End If
DocDir = fDialog.SelectedItems.Item(1)
If Right(DocDir, 1) <> “” Then DocDir = DocDir + “”
End With
If Documents.Count > 0 Then
Documents.Close SaveChanges:=wdPromptToSaveChanges
End If
Application.ScreenUpdating = False
DocList = Dir$(DocDir & “*.doc?”)
Set Destinatie = Documents.Open(DocDir & “Destinatie.txt”, False)
Do While DocList <> “”
‘The form may contain automacros, not required
‘by this macro, so disable them
WordBasic.DisableAutoMacros 1
Documents.Open DocDir & DocList
‘Save the form with the save only data option
With ActiveDocument
.SaveFormsData = True
.SaveAs FileName:=“Sursa.txt”, _
FileFormat:=wdFormatText, _
SaveFormsData:=True
‘Close the original form
.Close SaveChanges:=wdDoNotSaveChanges
End With
‘Now open the temporary saved text file containing the form data
Set Sursa = Documents.Open(“Sursa.txt”, False)
‘And write its content into the data file
Destinatie.Range.InsertAfter Sursa.Range.Text
‘Close the temporary file
Sursa.Close SaveChanges:=wdDoNotSaveChanges
‘Save the data file
Destinatie.Save
DocList = Dir$()
‘Re-enable the automacros
WordBasic.DisableAutoMacros 0
Loop
Application.ScreenUpdating = True
Exit Sub
err_FolderContents:
MsgBox Err.Description
WordBasic.DisableAutoMacros 0
End Sub
Ce trebuie să faceți în continuare? Copiați codul de mai sus, deschideți Microsoft Word, mergeți în Developer, Macros, creați un macro nou ExtractDataForm, faceți Paste în zona de cod fără să păstrați elementele inițiale.
Probleme. Doar puțină atenție dacă vreți să modificați codul sursă.
Dacă tot am creat fișierul .txt hai să obținem și datele pentru o prelucrare viitoare, în cazul de față în Excel. Deschideți Microsoft Excel, Data, Get External Data,… dar mai bine urmăriți imaginile (atenție, trebuie să selectați Semicolon).
După toate acestea vă puneți problema de ce atâta bătaie de cap, când pot folosi un formular web de colectare a datelor. Inițial așa am spus și eu, ca într-un final să realizez că sunt firme și instituții care folosesc documente Word de câteva zeci de pagini ce conțin zone de validare sau câmpuri de completat, dar ele sunt trimise prin poșta obișnuită și apoi datele sunt introduse manual într-o formă, mai mult sau mai puțin, de bază de date.
Abia astept lectiile de acces. Poate mai scap si eu de atata citit. 😀 Ma chinui sa fac o chestie relativ simpla, dar nu ma lasa rabdarea si timpul. :-< Vreau sa fac o relationare intre orase si judete si apoi eventual strazi. Cand scriu orasul intr-un camp in urmatorul camp sa apara automat judetul, iar in urmatorul sa am obtiunea sa aleg strazile din orasul respectiv.
PS: :-bd
urmează și access… și am să folosesc exemplul tău pentru introducere… mersi pentru idee…
Excelent si articolul asta … omule continua pe tema asta de business … este foarte util pentru mine !
Felicitari pentru articol/le !
@yo9fah dacă vrei ceva anume dă un semn… și apropo de “Windows pentru începători” ce zici de o colaborare… pe Windows XP… instalare, configurare, administrare? Nu mai fac asta de mult, dar sunt sigur că sunt unii care utilizează și ar avea nevoie.
@mdfro: În principiu aplicații pentru începători din Office, mai ales Office 2007. Referitor la colaborare, trimite un e-mail pe yo9fah@yahoo.com ! Mulțumesc pentru amabilitate !
“(atenție, trebuie să selectați Semicolon).”
Trebuia sa zici asa: atentie, veti alege delimitatorul (semicolon sau comma) specificat de setarile regionale, pt. ca in functie de acele setari vei avea coloanele despartite de punct si virgula (semicolon) sau de virgula (comma).
mersi pentru completare