Discussion:
HTML in Dokument ersetzen
(zu alt für eine Antwort)
Marcus Weidenfeller
2004-07-27 19:15:18 UTC
Permalink
Hallo NG,

ich verwende folgenden VBA Code um z.B. <b> Tags in einem
Dokument mit der Word-Formatierung zu ersetzen:
<code>
With ActiveDocument.Range.Find
.ClearFormatting
.Replacement.ClearFormatting
.Format = True
.MatchWildcards = True
.Text = "(\<b\>)(*)(\</b\>)"
.Replacement.Text = "\2"
.Replacement.Font.Bold = True
.Execute Replace:=wdReplaceAll
End With
</code>

Funzt prima. Leider muss ich auch <br> und Listen mit
<ul><li></li></ul> formatieren. Dabei habe ich keine
Ahnung, womit ich die gefundenen Textstellen ersetzen
soll. Jegliche Versuche schlugen bisher fehl.

Vielleicht noch wichtig zu wissen: verwende Word2000 und
generiere das Dokument aus Access2000 heraus.

Vielleicht kann mir jemand für die <br> und die Listen
einen (oder mehrerere) Tips geben!?

Danke und Gruß
Marcus
Klaus Linke
2004-07-27 21:52:07 UTC
Permalink
Post by Marcus Weidenfeller
ich verwende folgenden VBA Code um z.B. <b> Tags in
Hallo Marcus,

Wäre es nicht vielleicht einfacher, den Text als HTML in Word zu
importieren ("Einfügen > Datei", oder über ein IncludeText-Feld, oder
möglicherweise über die Zwischenablage und .Paste)?

Ansonsten
' <br> in manuelle Zeilenwechsel
.Text = "<br>"
.Replacement.Text = "^l"
. MatchWildcards = False

Für ungeordnete und geordnete Listen würde ich die Absatz-Formatvorlagen
"Aufzählungszeichen" und "Listennummer" verwenden.
Dazu müsstest du mit einer Wildcard-Suche nach \<ul\>(*)\</ul\> erst mal
die gesamte Liste markieren, und dann in diesem Bereich alle <li> durch die
entsprechende Absatzformatvorlage ersetzen:

.Text = "\<li\>(*)\</li\>"
.Replacement.Text = "\1"
.Replacement.Style = ActiveDocument.Styles(wdStyleListBullet)
' ActiveDocument.Styles(wdStyleListNumber) für <ol>...</ol>
.Forward = True
.Wrap = wdFindContinue
.MatchWildcards = True

Danach kannst du <ul> und </ul> entfernen, z. B. mit einer weiteren Suche
im ursprünglichen Bereich.

Gruß,
Klaus
Marcus Weidenfeller
2004-07-28 07:27:35 UTC
Permalink
Morgen Klaus und danke für Deine Infos!
Post by Klaus Linke
Wäre es nicht vielleicht einfacher, den Text als HTML in
Word zu
Hmm, momentan generiere ich über Access das Word Dokument
mit mehreren Tabellen untereinander. Immer in der zweiten
Zeile jeder Tabelle steht der Text, der HTML enthalten
kann. Alternativ müsste ich mir ja eine HTML Seite
generieren und die dann in Word automatisch (über vba)
importieren. Könnte man drüber nachdenken. Da ich aber
die "aufwendigere" Alternative bereits (bis auf das
Austauschen der <br> und <ul><li>) fertig habe, werde ich
wohl dabei bleiben. Funktioniert auch gut! :)

So, jetzt aber noch ein, zwei Fragen zu Deinen Codezeilen:
Was bedeutet genau das "^1" in .Replacement.Text = "^l"
(bzw. "\1")? Bei einem austauschbaren Range von z. B. <\b\>
(*)<\/b\> muss ich "\2" angeben. Seht das für die Anzahl
zu entfernender Tags? Hmm, nee, kann ja eigentlich nicht,
weil Du bei der Liste auch nur "\1" stehen hast *grübel*
Dann musste ich bei den <b>'s z. B. noch
angeben .Replacement.Font.Bold = True. Bei den <br> fehlt
sowas in der Art, also ein Zeilenumbruch.
Bei der Auflistung stand ich völlig auf dem Schlauch und
hatte ja so garkeine Idee! Danke! :)

Leider komme ich erst heute Abend dazu Deine Beispiele
einzubauen. Falls ich dann noch Probleme haben sollte,
melde ich mich nochmal!

Gruß
Marcus
Ina Koys
2004-07-28 09:09:08 UTC
Permalink
Post by Marcus Weidenfeller
Was bedeutet genau das "^1" in .Replacement.Text = "^l"
(bzw. "\1")?
Geh mal in Word Bearbeiten/Ersetzen und klicke auf "Erweitern". Und dann
sieh dir die Buttons "Format" und "Sonstiges" an - da wirst du neue
Bekannte treffen :-)

Ina
Marcus Weidenfeller
2004-07-28 17:06:26 UTC
Permalink
Post by Ina Koys
Geh mal in Word Bearbeiten/Ersetzen und klicke
auf "Erweitern". Und dann
Post by Ina Koys
sieh dir die Buttons "Format" und "Sonstiges" an - da
wirst du neue
Post by Ina Koys
Bekannte treffen :-)
Hy Ina,

jo, die kommen mir bekannt vor! :) Aber da finde ich noch
keine ^1 oder \2. Wo finde ich die denn? *such*

Greetz
Marcus
Ina Koys
2004-07-28 20:25:04 UTC
Permalink
Post by Ina Koys
Post by Ina Koys
Geh mal in Word Bearbeiten/Ersetzen und klicke
auf "Erweitern". Und dann
Post by Ina Koys
sieh dir die Buttons "Format" und "Sonstiges" an - da wirst du neue
Bekannte treffen :-)
Hy Ina,
jo, die kommen mir bekannt vor! :) Aber da finde ich noch
keine ^1 oder \2. Wo finde ich die denn? *such*
Guggstu ^l wie *L*udwig! ;-)

Ina
Klaus Linke
2004-07-29 10:03:58 UTC
Permalink
Post by Klaus Linke
.Text = "\<li\>(*)\</li\>"
.Replacement.Text = "\1"
Aber da finde ich noch keine \1 oder \2.
Wo finde ich die denn? *such*
Für \1 wird das eingesetzt, was im ersten (geklammerten Ausdruck) steht.

.Text = "\<li\>(*)\</li\>"
.Replacement.Text = "\1"

ist also das selbe wie

.Text = "(\<li\>)(*)(\</li\>)"
.Replacement.Text = "\2"

In der Word-Hilfe findest du am ehersten was, wenn du nach
"Platzhalterzeichen" suchst; Zitat:
~~~~~~~~~~~~~~~~~~~~
Sie können den Platzhalter \n verwenden, um beim Ersetzen eines Ausdrucks
die Reihenfolge der Elemente des Ausdrucks zu ändern. Geben Sie z. B.
(Müller) (Christine) im Feld Suchen nach ein und \2 \1 im Feld Ersetzen
durch. Word sucht dann nach "Müller Christine" und ersetzt den Ausdruck
durch "Christine Müller".
~~~~~~~~~~~~~~~~~~~~

Gruß,
Klaus

Klaus Linke
2004-07-27 22:08:41 UTC
Permalink
Eine andere Möglichkeit, HTML-Fragmente in ein Word-Dokument einzufügen,
wäre über HTMLProject:

Dim strHTML as String
Dim strHTMLFragment as String
strHTMLFragment = "Test <b>fett</b> <br>Zeile zwei"
Selection.InsertAfter "{Hier}"

strHTML = ActiveDocument.HTMLProject.HTMLProjectItems(1).Text
strHTML = Replace(strHTML, "{Hier}", strHTMLFragment)
ActiveDocument.HTMLProject.HTMLProjectItems(1).Text = strHTML
ActiveDocument.HTMLProject.RefreshDocument

Gruß,
Klaus
Loading...