我想要做的是通过解析一个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