Visual Basic - Technik, FAQ, Tricks, Beispiele

Home / Objekte / Office / Word2HTML

Word-Dokumente in HTML konvertieren

Historie
24.08.2005Bug bzgl. HTML-Konverter entfernt
25.08.2001Unterstützung von Word2000 (Hinweis von Rimma Levina, GGRZ Hagen)
02.11.2000Automatische Bestimmung des HTML-Konverters
09.07.2000Erste Version

Einleitung

Mit folgendem Code kann ein gegebenes Word-Dokument in ein HTML-Dokument konvertiert werden.

Da dabei (wegen der ggf. vorhandenen Bilder) mehrere Dateien entstehen können, kann ein Zielverzeichnis angegeben werden, wo die generierten Dateien abgelegt werden sollen. Wird kein Zielverzeichnis angegeben, so ist das Ergebnis im temporären Verzeichnis "[Temp]\Word2HTML\" zu finden. Die Funktion gibt daher den vollständigen Pfad zur generierten HTML-Datei zurück.

Um diese Routine benutzen zu können, muss natürlich Microsoft Word (zusammen mit dem HTML-Exportfilter) auf dem Rechner installiert sein. Außerdem muss im VB-Projekt unter Projekte/Verweise das Häckchen vor "Microsoft Word Object Library" (o.ä.) gesetzt sein.

Beispiele

s = Word2HTML("D:\Test\Bericht.doc")
MsgBox s 'ergibt z.B. "C:\TEMP\Word2HTML\Bericht.htm"

s = Word2HTML("D:\Test\Bericht.doc", "C:\x\")
MsgBox s 'ergibt "C:\x\Bericht.htm"

Code / Quelltext

Der folgende Funktion benutzt die in "Temp-Verzeichnis bestimmen" gezeigte TempDir-Funktion, um ein Arbeitsverzeichnis anzulegen. Mit Hilfe der SplitPath-Funktion aus "Dateipfad splitten" wird ein Dateiname generiert. Das Arbeitsverzeichnis wird geleert und anschließend Word "beauftragt", ein HTML-Dokument darin zu erzeugen. Ggf. werden dann noch alle generierten Dateien in das gewünschte Zielverzeichnis kopiert.

Public Function Word2HTML( _
    ByVal DocPath As String, _
    Optional ByRef DestDir As String _
  ) As String
  
  Dim TmpPath As String
  Dim App As Word.Application
  Dim Doc As Word.Document
  Dim FileName As String
  Dim File As String

  'Arbeitsverzeichnis vorbereiten:
  TmpPath = TempDir() & "Word2HTML\"
  On Error Resume Next
    MkDir TmpPath
  On Error GoTo 0

  'Ggf. Zielverzeichnis bestimmen:
  If DestDir = "" Then DestDir = TmpPath
  If Right$(DestDir, 1) <> "\" Then DestDir = DestDir & "\"
  SplitPath DocPath, Title:=FileName
  Word2HTML = DestDir & FileName & ".htm"

  'Arbeitsverzeichnis leeren:
  File = Dir$(TmpPath & "*")
  Do While Len(File)
    Kill TmpPath & File
    File = Dir$
  Loop

  'Eigentlicher Export:
  Set App = New Word.Application
  Set Doc = App.Documents.Open(DocPath)
  Doc.SaveAs TmpPath & FileName & ".htm", HTMLFileFormat(App)
  Set Doc = Nothing
  App.Documents.Close wdDoNotSaveChanges
  App.Quit
  DoEvents

  'Ergebnis-Dateien ggf. ins Ziel kopieren:
  If DestDir <> TmpPath Then
    On Error Resume Next
      MkDir DestDir
    On Error GoTo 0

    'Kopier-Schleife:
    File = Dir$(TmpPath & "*")
    Do While Len(File)
      FileCopy TmpPath & File, DestDir & File
      Kill TmpPath & File
      File = Dir$
    Loop

    On Error Resume Next
      RmDir TmpPath
    On Error GoTo 0
  End If
End Function

Die folgende Hilfsfunktion bestimmt den Word-internen Code für das SaveFormat (HTML-Filter). Ab Word2000 gibt es dafür die Konstante wdFormatHTML; Bei älteren Word-Versionen muss der entsprechende Konverter mittels einer Schleife gesucht werden:

Private Function HTMLFileFormat( _
    WordApp As Word.Application _
  ) As Long

  Dim obj As Word.FileConverter
  Static FileFormat As Long 'wird wiederverwendet

  If FileFormat = 0 Then
    If Int(Val(WordApp.Version)) > 8 Then
      'Word2000 besitzt Konstante:
      FileFormat = 8 'wdFormatHTML
    Else
      'Word97-Konverter suchen:
      For Each obj In WordApp.FileConverters
        If obj.ClassName = "HTML" Then
          FileFormat = obj.SaveFormat
          Exit For
        End If
      Next obj
    End If
  End If

  HTMLFileFormat = FileFormat
End Function

© Jost Schwider, 09.07.2000-24.08.2005 - http://vb-tec.de/wordhtml.htm