我有一个Excel工作簿,用作在我们的内部系统中生成用户可填写表单的起点。作为创建这些工作簿的用户的助手,我试图添加一个预览功能,使用该电子表格,执行一些VBA魔术来生成HTML文件,然后在浏览器中显示该功能。MSXML XHTML和嵌入式CSS
我已经完成了基本的结构,使用MSXML写出XHTML,到目前为止,这么好。现在,我遇到了嵌入样式表的问题。
样式表包含在VBA代码中的字符串中,我试图将它添加到标头中的<style>
标记中,这很简单。我遇到问题的地方是我在样式表中使用了CSS选择器,>
会导致我遇到问题,因为MSXML想将它编码为XML转义序列,从而破坏CSS。我试过在CDATA块中添加样式表,但是浏览器只是忽略它。
tl; dr:如何将包含>
的样式表嵌入到使用MSXML生成的HTML文件中?
编辑:这里是一段代码,再现这种行为。放入在Excel或所选的VBA的使用程序的Sub
,运行它,并查看源:
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。 – 2010-06-29 18:12:51
@Matt S:我已经更新了我的答案。 – Mike 2010-06-29 18:53:20
工作。现在我可以继续研究这种可憎的事了。 – 2010-06-29 19:01:28