我想要做的是通過解析一個XLS文件來創建一個XML文件。 一個例子應該是更相關:通過縮進從XLS單元格創建XML文件
| tag1 | | | |
| | tag2 | | |
| | | tag3 | tag3Value |
| | | tag4 | tag4Value |
| | tag5 | | |
| | | tag6 | tag6Value |
| | | | |
如果我們想象這些都是細胞,將相當於以下.XML代碼。
<tag1>
<tag2>
<tag3> tag3Value </tag3>
<tag4> tag4Value </tag4>
</tag2>
<tag5>
<tag6> tag6Value </tag6>
</tag5>
</tag1>
,纔不會被管理每次一個單元,只是在做「<」 &細胞(X,Y)&「>」這麼辛苦 但我想要一個完美的解決方案。這裏是我的執行至今:
Sub lol()
Sheet1.Activate
Dim xmlDoc As MSXML2.DOMDocument
Dim xmlNode As MSXML2.IXMLDOMNode
Set xmlDoc = New MSXML2.DOMDocument
createXML xmlDoc
End Sub
Sub createXML(xmlDoc As MSXML2.DOMDocument)
Dim newNode As MSXML2.IXMLDOMNode
If Not (Cells(1, 1) = "") Then
'newNode.nodeName = Cells(1, 1)
ReplaceNodeName xmlDoc, newNode, Cells(1, 1)
createXMLpart2 xmlDoc, newNode, 2, 2
xmlDoc.appendChild newNode
End If
xmlDoc.Save "E:\saved_cdCatalog.xml"
End Sub
Sub createXMLpart2(xmlDoc As MSXML2.DOMDocument, node As MSXML2.IXMLDOMElement, i As Integer, j As Integer)
Dim newNode As MSXML2.IXMLDOMElement
If Not (Cells(i, j) = "") Then
If (Cells(i, j + 1) = "") Then
'newNode.nodeName = Cells(i, j)
ReplaceNodeName xmlDoc, newNode, Cells(i, j)
createXMLpart2 xmlDoc, newNode, i + 1, j + 1
Else
'newNode.nodeName = "#text"
ReplaceNodeName xmlDoc, newNode, "#text"
'newNode.nodeValue = Cells(i, j + 1)
createXMLpart2 xmlDoc, newNode, i + 1, j
End If
node.appendChild (newNode)
End If
End Sub
Private Sub ReplaceNodeName(oDoc As DOMDocument, oElement As IXMLDOMElement, newName As String)
Dim ohElement As IXMLDOMElement
Dim sElement As IXMLDOMElement
Dim oChild As IXMLDOMNode
' search the children '
If Not oElement Is Nothing Then
Set ohElement = oElement.parentNode
Set sElement = oDoc.createElement(newName)
For Each oChild In oElement.childNodes
Call sElement.appendChild(oChild)
Next
Call ohElement.replaceChild(sElement, oElement)
End If
End Sub
問題:一開始我並沒有意識到,我不能這樣做node.nodeName =「了newName」 更改節點的名字我已經找到一個解決方案StackOverflow其實:Change NodeName of an XML tag element using MSXML
所以我已經評論了我重命名節點的嘗試,並嘗試使用ReplaceNodeName方法的版本。
實際的問題:createXMLpart2的node.appendChild(newNode)給我一個問題:它是變量「newNode」沒有設置。 我很困惑。
我有一個類似的問題,還沒有找到答案:( – 2011-05-20 12:17:47
我不是VBA的專家,但看着你的代碼,我不明白你爲什麼認爲'newNode' *會被初始化。在createXMLpart2()的開頭,你聲明它爲'Dim newNode As MSXML2.IXMLDOMElement',但是你在哪裏初始化它? – LarsH 2011-05-20 22:18:33
爲什麼你想要替換節點名?你應該爲每個節點實例化一個新的節點對象在你的XML中。 – elsni 2011-05-27 06:47:13