我想通过 VBA 将一些 HTML 格式的数据粘贴到 Word。 HTML 数据是通过将给定的 xsl 的 xml 文档转换为适当的 html 从 MS XML 获得的,我想将这种转换后的 html 数据放入保留 HTML 格式的 Word 中。
我发现将 HTML 数据导入 Word 的唯一方法是将它们放入剪贴板。
我为此使用了这个函数:
http://support.microsoft.com/kb/274326
然后使用 PasteSpecial Im 将其放入 Word。总的来说它可以工作但是......
问题在于完全畸形的特殊字符(在我的例子中是波兰语变音符号)。
根据http://msdn.microsoft.com/en-us/library/ms649015%28v=vs.85%29.aspx剪贴板中的 HTML 格式使用 UTF-8 进行编码,而在我的 XML 中我也使用 UTF-8,所以理论上一切都应该没问题,但事实并非如此。
我还试图找到一些将 ASCII 转换为 UTF 的函数(如果由于某种原因我的字符串是 ASCII)反之亦然(如果剪贴板除了 MS 在 MSDN 上写的内容之外还使用 ASCII)但没有成功。例如,使用 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 获取的文本是 ANCII。有谁知道将 ASCII 转换为 UTF 的更好函数吗?内置 StrConv(html, vbUnicode) 不能正常工作...
编辑:经过研究,我确定 - 我从 transformNode 获得的字符串是 ASCII(如 CF_TEXT 剪贴板格式),而 CF_HTML 需要 UTF-8 编码。如何将此字符串转换为 UTF-8?内置 StrConv(string,vUnicode) 不起作用...
最佳答案
你可以使用
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
这样你就不需要复制内容了。
[]的
关于xml - 通过 VBA 和剪贴板将 HTML 复制到 Word 会丢失特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6888606/