ABOUT Visual Basic Programmieren Programmierung Download Downloads Tips & Tricks Tipps & Tricks Know-How Praxis VB VBA Visual Basic for Applications VBS VBScript Scripting Windows ActiveX COM OLE API ComputerPC Microsoft Office Microsoft Office 97 Office 2000 Access Word Winword Excel Outlook Addins ASP Active Server Pages COMAddIns ActiveX-Controls OCX UserControl UserDocument Komponenten DLL EXE
Diese Seite wurde zuletzt aktualisiert am 06.06.2000

Diese Seite wurde zuletzt aktualisiert am 06.06.2000
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicActiveX-Komponenten, Controls, Klassen und mehr...AddIns für die Visual Basic-IDE und die VBA-IDEVBA-Programmierung in MS-Office und anderen AnwendungenScripting-Praxis für IE, Windows Scripting Host und das Scripting-ControlTools, Komponenten und Dienstleistungen des MarktesRessourcen für Programmierer (Bücher, Job-Börse)Dies&Das...

Themen und Stichwörter im ABOUT Visual Basic-Magazin
Code, Beispiele, Komponenten, Tools im Überblick, Shareware, Freeware
Ihre Service-Seite, Termine, Job-Börse
Melden Sie sich an, um in den vollen Genuss der AVB-Web-Site zu kommen!
Informationen zum ABOUT Visual Basic-Magazin, Kontakt und Impressum

Zurück...

HTML mit Format einfügen

Zurück...


Anzeige

(-hg) mailto:hg_vbawdhtmltodoc@aboutvb.de

Wenn Sie aus einem Browser-Fenster, aus einer HTML-Seite in Microsoft FrontPage oder einem anderen HTML-Fenster HTML-Text in die Zwischenablage kopiert haben, können Sie diesen in ein Microsoft Word-Dokument einfügen. Beim Einfügen bemüht sich Word, den HTML-Text möglichst originalgetreu wiederzugeben und die Formatierungen, Tabellen usw. so weit als möglich zu übernehmen.

Falls die Quelle Ihres HTML-Textes kein Zwischenablagen-Inhalt aus einem HTML-Fenster ist (also im Zwischenablagen-Format HTML), sondern Sie den HTML-Text selbst generieren und dieser dann als einfacher String vorliegt, können Sie diesen zwar auch in ein Word-Dokument einfügen - sowohl durch Zuweisung an die aktuelle Selection als auch über die Zwischenablage. Doch dann wird der Text nur als reiner Text eingefügt. Die HTML-Formatierung wird nicht erkannt und alle Tags werden im Dokument im Klartext dargestellt. Die naheliegendste Lösung (und offensichtliche auch einzige Möglichkeit) wäre nun, Ihren String im HTML-Format in die Zwischenablage zu verfrachten und ihn von dort aus in das Word-Dokument einzufügen.

Hierbei hilft Ihnen das DataObject aus der MSForms-Bibliothek. Sie können einer Instanz dieses DataObjects Daten unter Angabe einer beliebigen Format-Kennung übergeben - nicht nur in den geläufigen Standardformaten Text, RTF, Bitmap usw. - und von dort aus in die Zwischenablage verschieben. Die Format-Kennung für das HTML-Format liefert Ihnen die API-Funktion MSDN Library - API RegisterClipboardFormatRegisterClipboardFormat. Dieser übergeben Sie den standardisierten Klartext-Namen des Formats, hier "HTML Format", und erhalten die Kennung als Rückgabewert. Es ist dabei unerheblich, ob das Format bereits registriert ist oder nicht - es wird nur einmal von Ihrer Anwendung registriert und die Funktion gibt bei jedem erneuten Aufruf die gleiche Kennung zurück.

Die Daten, die Sie nun so in die Zwischenablage verschieben können, müssen allerdings aufbereitet werden. Vor den eigentlichen HTML-Text müssen Sie einen Vorspann setzen, der eine Versions-Nummer enthält und die Position des zu übertragenden HTML-Textes innerhalb des gesamten Datenblocks spezifiziert. Für unsere Zwecke genügt es, lediglich unseren HTML-String übertragen zu wollen. Das HTML-Format ist zwar um einiges flexibler, doch darauf möchte ich hier nicht weiter eingehen. Es genügen die Angaben für StartHTML, EndHTML, StartFragment und EndFragment, wie Sie sie im untenstehenden Code der Prozedur HTMLToClipboard sehen. Der Wert zu StartFragment (Das Fragment ist unser HTML-String) enthält die Anzahl der Zeichen einschließlich der Zeile EndFragment. EndFragment soll dagegen die Anzahl der Zeichen bis zum Ende des darauffolgenden HTML-Strings enthalten. Wir fügen diesen daher an den Vorspann an, ermitteln nun die gesamte Länge des Strings und ersetzen mittels der Replace-Funktion den Platzhalter "°°°°°°" hinter EndFragment durch den auf sechs Stellen (das sollte auch für sehr umfangreiche HTML-Strings reichen) formatierten Wert der Gesamtlänge.

Nun instanzieren wir ein DataObject, leeren es ausdrücklich und übergeben den soeben generierten HTML-Datenblock mit der oben ermittelten Format-Kennung. Allerdings müssen wir diesen Datenblock im reinen Ascii-Byte-Format übergeben. Da aber VBA intern einen String im als Unicode-String verwaltet, ist der Datenblock zur Übergabe mit der Funktion StrConv aus dem Unicode-Format zu konvertieren. Zu guter Letzt veranlassen wir das DataObject über die Methode PutInClipboard noch dazu, den Datenblock endgültig in die Zwischenablage zu verschieben.

Private Declare Function RegisterClipboardFormat Lib "user32" _
 Alias "RegisterClipboardFormatA" (ByVal lpString As String) _
 As Long
							
Public Sub HTMLToClipboard(HTMLText As String)
  Dim nCFHTML As Long
  Dim nClipboardText As String

  nCFHTML = RegisterClipboardFormat("HTML Format")

  nClipboardText = "Version:0.9" & vbCrLf
  nClipboardText = nClipboardText & "StartHTML:-1" & vbCrLf
  nClipboardText = nClipboardText & "EndHTML:-1" & vbCrLf
  nClipboardText = nClipboardText & "StartFragment:000081" & vbCrLf
  nClipboardText = nClipboardText & "EndFragment:°°°°°°" & vbCrLf

  nClipboardText = nClipboardText & HTMLText & vbCrLf

  nClipboardText = Replace(nClipboardText, "°°°°°°", _
   Format$(Len(nClipboardText), "000000"))

  With New DataObject
    .Clear
    .SetText StrConv(nClipboardText, vbFromUnicode), nCFHTML
    .PutInClipboard
  End With
End Sub

Nun verbleibt nur noch die Aufgabe, den Zwischenablage-Inhalt in das Word-Dokument einzufügen. Sie können dies im Prinzip schlicht mit der folgenden Anweisung erledigen:

Selection.Paste

Doch sicherheitshalber sollten Sie die Methode PasteSpecial mit der FormatAngabe wdPasteHTML verwenden:

Selection.PasteSpecial , , , , wdPasteHTML

Die Hilfsprozedur PasteHTML vereinfacht dieses Aufruf ein wenig und gestaltet ihn insofern auch flexibler, als dass Sie sowohl das Selection-Objekt als auch jedes beliebige Range-Objekt übergeben können. Und wenn Sie im optionalen Parameter HTMLText den einzufügenden HTML-String gleich mit übergeben, sorgt die Prozedur selbst für das Einfügen des HTML-Strings in die Zwischenablage - Sie können sich so den separaten Aufruf der obenstehenden Prozedur HTMLToClipboard sparen.

Public Sub PasteHTML(Obj As Object, Optional HTMLText As String)
  If Len(HTMLText) Then
    HTMLToClipboard HTMLText
  End If
  If (TypeOf Obj Is Range) Or (TypeOf Obj Is Selection) Then
    Obj.PasteSpecial , , , , wdPasteHTML
  End If
End Sub

Modul modWdHTMLToDoc (modWdHTMLToDoc.bas - ca. 1,4 KB)



VBA-Übersicht

Schnellsuche



Zum Seitenanfang

Copyright © 1999 - 2017 Harald M. Genauck, ip-pro gmbh  /  Impressum

Zum Seitenanfang

Zurück...

Zurück...

Download Internet Explorer