通过VBA和剪贴板将HTML复制到Word会丢失特殊字符

时间:2011-07-31 09:28:52

标签: xml vba ms-word clipboard

我想通过VBA将一些HTML格式的数据粘贴到Word。 HTML数据是从MS XML获得的,它通过给定的xsl将xml文档转换为适当的html,并将这个转换后的html数据放到Word中,保留HTML格式化。 我发现将HTML数据传递给Word的唯一方法就是将它们放入剪贴板。 我使用这个功能:
http://support.microsoft.com/kb/274326
然后使用PasteSpecial Im将其放到Word中。一般来说它有效但是......
问题在于特殊字符(在我的情况下是波兰语变音字母),它们完全是错误的。
根据{{​​3}}剪贴板中的HTML格式使用UTF-8进行编码,而在我的XML中我也使用UTF-8,所以理论上一切都应该没问题,但事实并非如此。
我还尝试找到一些将ASCII转换为UTF的函数(如果由于某种原因我的字符串是ASCII格式),反之亦然(如果剪贴板使用ASCII除了MS在MSDN上写的内容)但没有成功。例如,使用来自VBA的StrConv(html,vbUnicode)格式错误的所有HTML标记,并且仍然没有打印波兰字符。

我以这种方式获取html数据:

Dim xslt As New MSXML2.DOMDocument
xslt.Load (xsltfile)
Dim xmlDoc As New MSXML2.DOMDocument
xmlDoc.load(xmlfile)
html = xmlDoc.transformNode(xslt)

然后粘贴到Word(使用上面给出的函数)

PutHTMLClipboard html, "", ""
where.Paste
ClearClipboard

编辑:可能是xmlDoc.transformNode IS ANCII的文本。有没有人知道将ASCII转换为UTF的更好功能?内置StrConv(html,vbUnicode)不能很好地运行...

编辑:研究后我确定 - 我从transformNode得到的字符串是ASCII(如CF_TEXT剪贴板格式),CF_HTML需要UTF-8编码。我怎么能把这个字符串转换成UTF-8?内置StrConv(字符串,vUnicode)不起作用......

1 个答案:

答案 0 :(得分:0)

您可以使用

Sub OpenHtml()
'officevb.com

Dim wd As Word.Application
Dim doc As Word.Document

Set wd = Application

Set doc = wd.Documents.Open("http://www.google.com.br")

doc.SaveAs "G:\page.docx", wdFormatDocument

End Sub

这样您就不需要复制内容了。

[]的