[VBA/WORD] Paste HTML + encoded characters

Pagina: 1
Acties:

  • Sisko
  • Registratie: Oktober 2003
  • Laatst online: 17-04-2014
Nadat het gelukt was om een string HTML in Word te plakken (zie: [rml][ VBA/WORD] Plakken HTML string*[/rml]]) ben ik tegen een volgende probleem aangelopen. Als de HTML string extended characters bevat (zoals bv: é ö á etc..) worden deze niet getoond in Word (er verschijnt op de plek van het teken een vierkantje). Bij het handmatig knippen en plakken van HTML (van browser naar Word) worden deze echter wél netjes meegenomen.

Mijn vermoeden is dat er ergens in de clipboard code een fout zit waardoor de tekens verloren gaan.

HTML to clipboard module
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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


Code fragment uit de macro voor het plakken van de HTML
code:
1
2
HTMLToClipboard (sBriefBody)
ActiveDocument.Bookmarks("BRIEFTEKST").Range.Paste


Iemand enig idee?

[ Voor 7% gewijzigd door Sisko op 24-05-2005 10:11 . Reden: onrelevante lijn in code ]


  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB/AI

Front verplichte underscores

Mijn eerste gedachte cq. gok is dat je wilt checken welke fonts worden gebruikt en hoe de karakters in de HTML worden weergegeven. Met de hand copy/pasten wordt vaak het standaard font gebruikt (met "Normaal (web)" profiel, ik kan me voorstellen dat in de HTML een ander font / karakterset / etc staat. Als deze niet die tekens bevat in je Word font, kan je idd. vierkantjes krijgen.

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


  • Sisko
  • Registratie: Oktober 2003
  • Laatst online: 17-04-2014
Hieronder de HTML-string zoals wij die gebruiken bij het testen.
code:
1
sBriefBody = <b>begin</b><br/> äéö <br /><b>eind</b>"
Hij zou dus het standaard font in word moeten gebruiken.

output lijkt op:
begin

eind

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB/AI

Front verplichte underscores

OK, dat is het dus niet. En wat als je "zoals het hoort" &auml; gebruikt? ä dus ipv ä (zie de code als je quote en ja ik speel vals met mijn HTML rechten op het forum) :)

(Ik kan je VB code even niet testen dus moet gokken, ik kan er finaal naast zitten :P )

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


  • Sisko
  • Registratie: Oktober 2003
  • Laatst online: 17-04-2014
De html entities in de string gebruiken werkt.
Een oplossing zou dus zijn een functie te gebruiken die eerst alle extended chars in de html string naar hun entity vertaald (é = &#233; etc.. ).

[ Voor 10% gewijzigd door Sisko op 24-05-2005 10:31 ]