Förhandsgranska dokument i Microsoft Access-formulär
Projektomfattning
Vi har nyligen lagt till ett dokumentcenter till ett projekt som låter användare bifoga dokument som pdf, word, txt och bilder till ett projekt. Dessutom kommer de att ha en automatisk process inställd för att läsa inkommande e-postmeddelanden och spara e-postbilagor på en nätverksenhet. Målet är att låta användaren se nya dokument som har tagits emot och spara dem på rätt plats. Naturligtvis kommer vi att hantera processen för att extrahera information som ämne och vem dokumentet kom ifrån för att låta användaren förstå den allmänna informationen i dokumentet och detta kommer att sparas i en tabell. Dessutom måste användaren kunna se dokumentet för att läsa dess innehåll.
Lösning
Vi kan naturligtvis starta andra applikationer från åtkomst till att visa word-dokument i Word och pdf i Adobe Acrobat etc. Men när en användare bara har en skärm att arbeta med innebär detta att byta från en applikation till en annan och om det finns flera dokumenttyper då naturligtvis innebär detta att öppna flera applikationer. Vi tillhandahöll därför en enkel lösning som skulle lansera dokumentet i ett nytt åtkomstformulär med fliklayout så att användaren enkelt kan hantera systemet. I exemplet nedan använder jag kod som läser filen från en given sökväg, som användaren behöver åtkomst till på sin dator. Alternativt, om dokumentet sparas i en SQL-tabell, kan vi ändra koden för att tillfälligt spara dokumentet på en lokal enhet och starta filen från den tillfälliga platsen. Om du använder den här metoden vill du också inkludera ytterligare kod för att radera den tillfälliga filen efter att ha visat/stängt formuläret.
Exempelformulär
Exempelformuläret som tillhandahålls bör startas förbi dokumentsökvägen i OpenArgs
DoCmd.OpenForm "frmDocumentReview", OpenArgs:= Me.DocumentPath
On load-koden verifierar att sökvägen passerades och även om filen finns. Om allt är bra 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
Slutligen läser koden in dokumentet. Showdocument sub tar hand om de olika dokumenttyperna. De flesta dokumenttyper använder fallet else. Själva formuläret har en dold textruta som heter txtPath som lagrar värdet för OpenArgs (filnamn och sökväg) detta kan antingen vara en mappad enhet eller UNC. Webbläsarobjektet lagrar =[txtPath] som kontrollkälla. Word-dokument fungerar dock inte på samma sätt, och du måste först spara dokumentet som html. Jag använde en metod som ursprungligen skrevs av Crystal Long och gjorde några mindre ändringar.
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