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

标签 xml vba ms-word clipboard

我想通过 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/

相关文章:

java - Spring XML 配置中的工厂方法 bean 继承

wpf - 如何将代码隐藏中的 xml 字符串加载到绑定(bind)到 XML 的 XPath 的数据绑定(bind) UI 控件?

java - 从字符串中获取值

vba - Outlook 2007 中的上下文菜单可在我选择的浏览器中打开链接

ios - 我们如何在iOS应用中编辑Word文档(docx,xl​​sx,ppt)和pdf文件

php - 使用 PHP 移除 MS Word "HTML"

java - Xstream 和使用保留关键字作为 XML 属性的解决方法。 ("class")

ms-access:在数据库打开时执行某些操作

vba - Excel VBA 工作表事件在隐藏/取消隐藏之间切换

Excel 正在等待 Word 文档完成 OLE 操作