Копирование HTML в Word через VBA и буфер обмена теряет специальные символы - PullRequest
3 голосов
/ 31 июля 2011

Я хотел бы вставить некоторые данные в формате HTML в Word через VBA.Данные HTML получаются из MS XML путем преобразования документа XML с помощью данного xsl в соответствующий HTML, и эти преобразованные данные HTML, которые я хочу поместить в Word, сохраняют форматирование HTML.Я обнаружил, что единственный способ передать данные HTML в Word - поместить их в буфер обмена.Я использую эту функцию для этого:http://support.microsoft.com/kb/274326И затем, используя PasteSpecial, я помещаю это в Word.В целом это работает, но ...Проблема в специальных символах (в моем случае это польские диакритические буквы), которые полностью искажены.В соответствии с форматом http://msdn.microsoft.com/en-us/library/ms649015%28v=vs.85%29.aspx HTML в буфере обмена для кодирования используется UTF-8, а в моем XML я также использую UTF-8, поэтому в теории все должно быть хорошо, но это не так.Я также попытался найти некоторую функцию для преобразования ASCII в UTF (в случае, если по какой-то причине моя строка находится в ASCII) и наоборот (в случае, когда буфер обмена использует ASCII, помимо того, что MS пишет в MSDN), но безуспешно.Например, использование StrConv (html, vbUnicode) из VBA исказило все 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 (string, vUnicode) не работает ...

1 Ответ

0 голосов
/ 17 сентября 2011

Вы можете использовать

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

Таким образом, вам не нужно копировать содержимое.

[] s

...