我有一個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