VBA 出力EXCLE的数据成xml (带层次关系)

Public Sub Workbook_BeforeSave()

Dim fileName As String
Dim firstIndex As Integer
Dim lastIndex As Integer
Dim rootNodeName As String
Dim xmlDoc As MSXML2.DOMDocument

fileName = Worksheets(2).Range("B8").Value
firstIndex = Worksheets(2).Range("B10").Value
lastIndex = Worksheets(2).Range("B11").Value
rootNodeName = Worksheets(2).Range("B12").Value

If fileName = "" Then
MsgBox ("僼傽僀儖僷僗傪巜掕偔偩偝偄丅")
Exit Sub
End If

Set xmlDoc = New MSXML2.DOMDocument

Set rootNode = xmlDoc.createElement(rootNodeName)
Set xmlDoc.DocumentElement = rootNode
Set Header = xmlDoc.createProcessingInstruction("xml", "version='1.0' encoding='UTF-8'")
xmlDoc.InsertBefore Header, xmlDoc.ChildNodes(0)

xmlDoc.Save fileName
Set xmlDoc = Nothing

Call OutputSchema(fileName, firstIndex, lastIndex)

End Sub

Public Sub OutputSchema(fileName, firstIndex, lastIndex)
Dim caseIndex As Integer
Dim pmstartIndex As Integer

'case僨乕僞start
caseIndex = Worksheets(1).Range("IV1").End(xlToLeft).Column

'僷儔儊乕僞楍栚傪庢摼
For i = 1 To caseIndex
cellValue = Worksheets(1).Cells(1, i).Value
If cellValue = "pmstart" Then
pmstartIndex = i
Exit For
End If
Next

Dim nodeIndex As Integer
Dim xmlNode(100) As IXMLDOMElement '梫慺

Set xmlDoc = New MSXML2.DOMDocument
xmlDoc.Load fileName

Set Root = xmlDoc.DocumentElement
Set xmlNode(1) = Root
For nodeIndex = firstIndex To lastIndex
nodeName = Worksheets(1).Cells(nodeIndex, pmstartIndex).Value
attrValue = Worksheets(1).Cells(nodeIndex, pmstartIndex + 1).Value
caseValue = Worksheets(1).Cells(nodeIndex, pmstartIndex + 2).Value

For j = 2 To pmstartIndex
PmName = Worksheets(1).Cells(nodeIndex, j).Value
nextPmName = Worksheets(1).Cells(nodeIndex + 1, j + 1).Value
If Not PmName = "" Then
Set xmlNode(j) = xmlNode(j - 1).appendChild(xmlDoc.createElement(nodeName))
If Not attrValue = "" Then
Set xmlAttr = xmlNode(j).Attributes.setNamedItem(xmlDoc.createAttribute("nameSpace"))
xmlAttr.nodeValue = attrValue
End If
If nextPmName = "" Or j = pmstartIndex - 1 Then
xmlNode(j).Text = caseValue & vbCrLf
End If

Exit For
End If
Next
Next
xmlDoc.Save fileName
Set xmlDoc = Nothing
End Sub
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值