Vis dokumenter i Microsoft Access-formular
Projektomfang
Vi har for nylig tilføjet et dokumentcenter til et projekt, som giver brugerne mulighed for at vedhæfte dokumenter som pdf, word, txt og billeder til et projekt. Derudover vil de have en automatisk proces sat op til at læse indgående e-mails og gemme de vedhæftede e-mails på et netværksdrev. Målet er at give brugeren mulighed for at se nye dokumenter, der er modtaget, og gemme dem på det rigtige sted. Selvfølgelig vil vi styre processen med at udtrække information såsom emne og hvem dokumentet kom fra for at give brugeren mulighed for at forstå den generelle information om dokumentet, og dette vil blive gemt i en tabel. Derudover skal brugeren være i stand til at se dokumentet for at læse dets indhold.
Løsning
Vi kan selvfølgelig starte andre applikationer fra adgang til at se word-dokumenter i Word og pdf i Adobe Acrobat osv. Men når en bruger kun har én skærm at arbejde med, betyder det at skifte fra en applikation til en anden, og hvis der er flere dokumenttyper Dette betyder selvfølgelig at åbne flere applikationer. Vi leverede derfor en simpel løsning, der ville lancere dokumentet i en ny adgangsform med fanelayout, så brugeren nemt kan administrere systemet. I eksemplet nedenfor bruger jeg kode, der læser filen fra en given sti, som brugeren skal have adgang til på deres computer. Alternativt, hvis dokumentet er gemt i en SQL-tabel, kan vi ændre koden for midlertidigt at gemme dokumentet på et lokalt drev og starte filen fra den midlertidige placering. Hvis du bruger denne metode, vil du også gerne inkludere yderligere kode for at slette den midlertidige fil efter at have set/lukket formularen.
Eksempelformular
Eksempelformularen skal startes ved at passere dokumentstien i OpenArgs
DoCmd.OpenForm "frmDocumentReview", OpenArgs:= Me.DocumentPath
Indlæsningskoden bekræfter, at stien blev bestået, og også om filen eksisterer. Hvis alt er godt, fortsætter processen.
Private Sub Form_Load() If IsNull(Me.OpenArgs) Then MsgBox "No document to show", , "Path not specified" Exit Sub Else If Not FSO.FileExists(Me.OpenArgs) Then MsgBox "Your computer does not have access to the named file. You need to download the file to view it." Exit Sub Else Showdocument OpenArgs End If End If End Sub
Til sidst indlæser koden dokumentet. Showdocument sub tager sig af de forskellige dokumenttyper. De fleste dokumenttyper bruger sagen else. Selve formularen har et skjult tekstfelt kaldet txtPath som gemmer værdien af OpenArgs (filnavn og sti), dette kan enten være et kortlagt drev eller UNC. Webbrowserobjektet gemmer =[txtPath] som kontrolkilde. Word-dokumenter fungerer dog ikke på samme måde, og du skal først gemme dokumentet som html. Jeg brugte en metode oprindeligt skrevet af Crystal Long og lavede nogle mindre ændringer.
Private Sub Showdocument(strPath As String) Dim strExt As String Dim sPathFileHTML As String Dim oWordApp As Object Dim oDoc As Object strExt = GetFileExt(strPath) Select Case strExt Case "docx" 'save word doc as HTML sPathFileHTML = CurrentProject.Path & "\temp.html" Set oWordApp = CreateObject("Word.Application") Set oDoc = oWordApp.Documents.Open(strPath) oDoc.SaveAs2 FileName:=sPathFileHTML, FileFormat:=8 'wdFormatHTML oDoc.Close False oWordApp.Quit Set oDoc = Nothing Set oWordApp = Nothing Case Else sPathFileHTML = strPath End Select 'open in browser control Me.txtPath.Value = sPathFileHTML End Sub