У меня есть книга Excel, которая используется в качестве отправной точки для создания заполняемой пользователем формы в нашей внутренней системе. В качестве помощника для пользователей, создающих эту книгу, я пытаюсь добавить функцию предварительного просмотра, которая принимает эту электронную таблицу, делает некоторые магии VBA для создания HTML-файла, а затем отображает это в своем браузере.MSXML XHTML и встроенный CSS
У меня есть базовая структура, использующая MSXML для выписывания XHTML, пока что так хорошо. Теперь я сталкиваюсь с проблемой встраивания таблицы стилей.
Таблица стилей содержится в строке кода VBA, и я пытаюсь добавить ее в тег <style>
в заголовке, что является простым. Там, где у меня проблема, я использую селектор CSS в таблице стилей с >
, что вызывает у меня проблемы, поскольку MSXML хочет кодировать это как escape-последовательность XML, нарушая CSS. Я попытался добавить таблицу стилей в блок CDATA, но затем браузер просто игнорирует ее.
tl; dr: Как я могу вставить таблицу стилей, содержащую >
, в файл HTML, созданный с помощью MSXML?
EDIT: Вот блок кода, который воспроизводит это поведение. Поместите его в 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
Не совсем применимо, я строю документ XHTML напрямую, а не используя XSLT. –
@Matt S: Я обновил свой ответ. – Mike
Это сработало. Теперь я могу продолжить работу над этой мерзостью. –