У меня есть книга Excel, которая используется в качестве отправной точки для создания заполняемой пользователем формы в нашей внутренней системе. Как помощник для пользователей, создающих эту книгу, я пытаюсь добавить функцию предварительного просмотра, которая берет эту электронную таблицу, выполняет магию VBA для генерации HTML-файла и затем отображает ее в своем браузере.
У меня есть базовая структура, использующая MSXML для написания XHTML, пока что все хорошо. Теперь у меня проблема с встраиванием таблицы стилей.
Таблица стилей содержится в строке в коде VBA, и я пытаюсь добавить ее в тег <style>
в заголовке, что довольно просто. Проблема в том, что я использую селекторы CSS в таблице стилей, и >
вызывает у меня проблемы, поскольку MSXML хочет закодировать это как escape-последовательность XML, нарушая CSS. Я пытался добавить таблицу стилей в блок CDATA, но затем браузер просто игнорирует ее.
tl; dr: Как вставить таблицу стилей, содержащую >
, в файл HTML, созданный с помощью MSXML?
РЕДАКТИРОВАТЬ: Вот блок кода, который воспроизводит это поведение. Поместите его в Sub
в Excel или в программу на VBA по вашему выбору, запустите ее и просмотрите исходный код:
Dim doc As DOMDocument
Dim htmlRoot As IXMLDOMElement
Dim bodyRoot As IXMLDOMElement
Dim headRoot As IXMLDOMElement
Dim style As IXMLDOMElement
Set doc = New DOMDocument
Set htmlRoot = doc.createElement("html")
Set bodyRoot = doc.createElement("body")
Set headRoot = doc.createElement("head")
Set style = doc.createElement("style")
style.appendChild doc.createTextNode(".section>.title{font-weight: bold;}")
style.setAttribute "type", "text/css"
headRoot.appendChild style
htmlRoot.appendChild headRoot
htmlRoot.appendChild bodyRoot
doc.appendChild htmlRoot
Dim fs As FileSystemObject
Dim sh
Dim tempFolder As String
Set fs = New FileSystemObject
Set sh = CreateObject("WScript.Shell")
tempFolder = fs.GetSpecialFolder(TemporaryFolder)
Dim fileName As String
fileName = tempFolder + "\preview.html"
doc.Save fileName
sh.Run fileName