Microsoft Office Produkte in einem WebBrowser Control öffnen (VB)

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von PhilNech.

    Microsoft Office Produkte in einem WebBrowser Control öffnen (VB)

    Hallo zusammen.

    Ich bitte jetzt schon mal um Entschuldigung falls bereits ein Thread zu diesem Thema besteht, jedoch habe ich bis jetzt noch nichts passendes dazu gefunden und bin auch erst seit heute dabei.

    Und nun zu meinem Problem:

    Und zwar schreibe ich derzeit ein kleines Dokumentationsprogramm. Da wir eine eher unübersichtliche Ordnerstruktur haben versuche ich nun mit diesem Programm PDF, Word und Excel dateien auszulesen und in einem WebBrowser Control zu öffnen.
    Mein Problem ist jetzt, dass sich die PDF's schön öffnen lassen, jedoch beim öffnen von Word und Excel Dateien immer das Programm selbst geöffnet wird.

    Hoffe es hat jemand eine Idee dazu bzw. kann mir weiterhelfen.

    EDIT:
    Aja ich arbeite mit VIsual Studio 2013 und Microsoft Office 2013
    Mit freundlichen Grüßen
    PhilNech :)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „PhilNech“ ()

    Mit nem Webbrowser Docs darstellen ist schon ne spannende Idee.
    Aber nun mal die wichtigste Frage:
    Was hast du schon programmiert und wo liegt das Problem genau (Code)?
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Also ich kann die Dateien schon suchen und gebe sie in einer Listbox aus.
    In der Listbox selectiere ich danach die gewählte Datei und öffne sie mit einem Button:

    Hier mal mein Code den ich derzeit besitze (ja einige Funktionen haben noch keinen Code, da ich erst diese Problem fertig stellen will)

    VB.NET-Quellcode

    1. Option Explicit On
    2. Imports System.Text.RegularExpressions
    3. Public Class Form1
    4. Dim path As String
    5. Dim Dateiliste() As String
    6. Dim speicherPfad As New Pfad()
    7. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    8. 'Pfad Angabe:
    9. path = "F:\Daten\edv\necphi"
    10. '------------------------------------------------------------
    11. 'Suche nur nach PDF, Word und Excel Dokumente:
    12. Dim DateilistePDF() As String = System.IO.Directory.GetFiles(path, "*.pdf", IO.SearchOption.AllDirectories)
    13. Dim DateilisteDOC() As String = System.IO.Directory.GetFiles(path, "*.doc", IO.SearchOption.AllDirectories)
    14. Dim DateilisteXLS() As String = System.IO.Directory.GetFiles(path, "*.xls", IO.SearchOption.AllDirectories)
    15. Dim strTemp As String
    16. strTemp = Join(DateilistePDF, Chr(0)) & Chr(0) & Join(DateilisteDOC, Chr(0)) & Join(DateilisteXLS, Chr(0)) & Chr(0)
    17. Dateiliste = Split(strTemp, Chr(0))
    18. '------------------------------------------------------------
    19. End Sub
    20. Private Sub sucheDateinameBtn_Click(sender As Object, e As EventArgs) Handles sucheDateinameBtn.Click
    21. If (dateinameTB.Text = "") Then
    22. Else
    23. gefundenLB.Items.Clear()
    24. Dim gefundenDoku As Integer = 0 'Hilfsvariable zum Feststellen ob ein Dokument gefunden wurde.
    25. For Each foundFile As String In Dateiliste
    26. If foundFile.Contains(dateinameTB.Text) Then
    27. gefundenLB.Items.Add(foundFile)
    28. gefundenDoku = gefundenDoku + 1
    29. End If
    30. Next
    31. If gefundenDoku = 0 Then
    32. MsgBox("Keine Datei gefunden!")
    33. End If
    34. End If
    35. End Sub
    36. Private Sub dateinameTB_TextChanged(sender As Object, e As EventArgs) Handles dateinameTB.TextChanged
    37. End Sub
    38. Private Sub sucheInhaltBtn_Click(sender As Object, e As EventArgs) Handles sucheInhaltBtn.Click
    39. If (inhaltTB.Text = "") Then
    40. 'kein Code benötigt, da hier sonst nichts passiert.
    41. MsgBox("Noch keine Funktion vorhanden!")
    42. Else
    43. 'Code für das Suchen von den Inhalten der Dateien.
    44. MsgBox("Noch keine Funktion vorhanden!")
    45. End If
    46. End Sub
    47. Private Sub inhaltTB_TextChanged(sender As Object, e As EventArgs) Handles inhaltTB.TextChanged
    48. End Sub
    49. Private Sub gefundenLB_SelectedIndexChanged(sender As Object, e As EventArgs) Handles gefundenLB.SelectedIndexChanged
    50. End Sub
    51. Private Sub oeffnenBtn_Click(sender As Object, e As EventArgs) Handles oeffnenBtn.Click
    52. dateiAnzeigenWB.Navigate(gefundenLB.SelectedItem)
    53. speicherPfad.Save(gefundenLB.SelectedItem)
    54. End Sub
    55. Private Sub dateiAnzeigenWB_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles dateiAnzeigenWB.DocumentCompleted
    56. End Sub
    57. Private Sub ResetToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ResetToolStripMenuItem.Click
    58. End Sub
    59. Private Sub InfoToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles InfoToolStripMenuItem.Click
    60. End Sub
    61. Private Sub openFileDialog_FileOk(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles openFileDialog.FileOk
    62. End Sub
    63. Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
    64. End Sub
    65. Private Sub HistorieToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles HistorieToolStripMenuItem.Click
    66. End Sub
    67. Private Sub MenuStrip1_ItemClicked(sender As Object, e As ToolStripItemClickedEventArgs) Handles MenuStrip1.ItemClicked
    68. End Sub
    69. End Class


    Das Problem derzeit ist, dass sich Word bzw. Excel immer öffnet anstatt in dem Control. PDF funktioniert einwandfrei.
    Muss auch kein WebBrowser Control benutzen wenn es eine andere Lösung gibt.
    Mit freundlichen Grüßen
    PhilNech :)
    Soweit ich weiss, ist das WebBrowser-Control in VB.net nur ein gekapselter InternetExploder.
    Das dieser Office-Dateien darstellen kann, ist ein ActiveX-Control notwendig.

    Das Problem derzeit ist, dass sich Word bzw. Excel immer öffnet anstatt in dem Control.

    Nunja.
    Im System ist eine Dateizuordnung, mit der *.doc* bzw *.xls* aufgerufen werden.
    Da der Browser nicht weiss, was er mit der Datei anfangen soll, läd er diese runter und übergibt sie dem System.
    Dieses kennt die Dateitypen und weiss, mit welchem Programm er diese zu öffnen hat.

    Das starte dann halt Word bzw. Excel.

    Wichtig ist, dem Browser (in diesem Fall wohl dem IE) die Möglichkeit zu geben, diese Dateien zu öffnen.

    Ich hatte mich vor zwei oder drei Jahren damit beschäftigt, Excel-Dateien in einer Winform anzuzeigen und sie zu bearbeiten.
    Ich fand seinerzeit nicht mal die Möglichkeit der Anzeige.
    Ich bastelte mir etwas, was mit eine PNG-Datei in einer PictureBox anzeigt, die vorher aus einer PDF erzeugt wurde.
    Excel via Interop die Datei öffnen lassen, die mittels PDF-Drucker drucken, die entstandene PDF-Datei in eine Grafik-Datei umwandeln und diese dann der PictureBox zuweisen.
    Das war nichts performates und schon garnichts schönes.
    Es gibt einige Lösungen die dieses Vorgehen empfehlen. Sind aber alle von Anno dazumal.
    Ich weiß nicht ob das so einfach umzusetzen ist. Der IE hat sich im Laufe der Zeit ja schon geändert.
    Zudem weiß ich nicht ob es, wenn man es zurecht frickelt, zu extremer Inkompatibilität bei den neuen Office Formaten kommt.
    Mir wäre aber auch nicht bekannt, dass der IE Word und Co. darstellen kann.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Danke für Eure Antworten.

    Besteht die Möglichkeit, dass ich vor dem öffnen der Datei diese als PDF speichern kann und anschließend Temporär speichere und nach dem Schließen wieder löschen kann?
    Weil dann kann ich diese mit dem PDFViewer öffnen.
    Bzw. kann man .doc/.docx mit einem RTF Control öffnen?
    Weil da könnte ich eventuell Word-Dateien in dem RTF Control öffnen, Excel-Dateien in einem DGV und PDF im PDF Viewer.
    Diese 3 Controls übereinander legen und je nachdem welches ich benötige Visible machen?
    Ist nur ein Gedankenansatz von eben, aber noch nicht versucht bzw. genauer darüber nachgedacht.
    Mit freundlichen Grüßen
    PhilNech :)
    Solang die Interop-Librarys auf dem Client installiert sind, aknnst Du die Datei (Word oder Excel) öffnen, auf einem PDF-Drucker ausdrucken (bzgl. dessen habe ich gute Erfahrungen mit dem Bullzip-PDF-Printer und dessen COM-Api gemacht) und diese Datei dann anzeigen lassen.

    Ebenso sollte es einen Converte für *.doc -> *.rtf geben.
    All meinen Erfahrungen nach wird da aber meistens die Formatierung vermurkst.

    Auch um eine Excel-Datei in einem DataGridView darzustellen, musste Du die Excel-Datei auch erstmal lesen können.
    Auch da ist Interop wieder gefragt.

    tutorialspoint.com/vb.net/vb.net_excel_sheet.htm
    dotnetperls.com/excel-vbnet

    Auch wenn bei diesen Beispielen Daten aus der Anwendung nach Excel geschrieben werden, ist der umgekehrte Weg ebenso möglich. Also bspw. Daten aus Excel in ein DataGridView zu schreiben.

    Voraussetztung, das die Kommunikation via Interop funktioniert ist allerdings ein installiertes Office auf dem Client-Rechner.