Alex_Piggy
Advanced Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Код: Option Explicit Const cChanNum = 1 Const cChanName = 2 Const cRtuNum = 3 Const cRtuName = 4 Const cStatuses = 5 Const cStatName = 6 Const cStatTMS = 7 Const cStatDelta = 8 Const cTU = 9 Const cStatClass = 10 Const cStatInv = 11 Const cStatLog = 12 Const cAPS = 13 Const cStatGrav = 14 Const cTwoBits = 15 Const cAnalogs = 16 Const cAnalogName = 17 Const cAnalogTMS = 18 Const cAnalogDelta = 19 Const cUnits = 20 Sub Main() Dim oXML, oRange, aRange Set oXML = CreateObject("MSXML2.DomDocument.3.0") oXML.LoadXML "<?xml version='1.0' encoding='UTF-8'?><InterfaceSSHConfig xmlns:g='urn:1'/>" Set oRange = Range("A2:T2") Dim oChannel, oRTU, oStatuses, oAnalogs Do aRange = oRange.Value Select Case False Case aRange(1, cChanNum) = "": Set oChannel = CreateChild(oXML.DocumentElement, "CHANNEL", "") oChannel.setAttribute "ChannelNum", aRange(1, cChanNum) oChannel.setAttribute "ChannelName", aRange(1, cChanName) Case aRange(1, cRtuNum) = "": Set oRTU = CreateChild(oChannel, "RTU", "") oRTU.setAttribute "RTUName", aRange(1, cRtuName) oRTU.setAttribute "RtuNum", aRange(1, cRtuNum) Case aRange(1, cStatuses) = "": Set oStatuses = CreateChild(oRTU, "STATUSES", "") oStatuses.setAttribute "StaDesc", aRange(1, cStatuses) Case aRange(1, cStatTMS) = "": With CreateChild(oStatuses, "STATUS", "") .setAttribute "StatusPoint", aRange(1, cStatTMS) .setAttribute "StatusName", aRange(1, cStatName) If aRange(1, cStatClass) <> "" Then .setAttribute "StatusClass", aRange(1, cStatClass) If aRange(1, cStatInv) <> "" Then .setAttribute "StatusInvert", "+ (да)" If aRange(1, cStatLog) <> "" Then .setAttribute "StatusRetro", "- (нет)" If aRange(1, cAPS) <> "" Then .setAttribute "StatusSignal", "+ (аварийно-предупредительный)" Select Case aRange(1, cStatGrav) Case 1: Case 2: .setAttribute "StatusImp", "2 (сигнал)" Case 3: .setAttribute "StatusImp", "3 (сирена)" Case Else: .setAttribute "StatusImp", "0 (не записывать)" End Select End With Case aRange(1, cAnalogs) = "": Set oAnalogs = CreateChild(oRTU, "ANALOGS", "") oAnalogs.setAttribute "AnaDesc", aRange(1, cAnalogs) Case aRange(1, cAnalogTMS) = "": With CreateChild(oAnalogs, "ANALOG", "") .setAttribute "AnalogPoint", aRange(1, cAnalogTMS) .setAttribute "AnalogName", aRange(1, cAnalogName) .setAttribute "AnalogUnits", aRange(1, cUnits) End With Case Else: Exit Do End Select Set oRange = oRange.Offset(1, 0) Loop oXML.Save "result.xml" End Sub Function CreateChild(oParent, vCode, vValue) Dim oTMP, oNameSpace Set oTMP = oParent.OwnerDocument.createElement(vCode) If vValue <> "" Then oTMP.Text = vValue oParent.appendChild oTMP Set CreateChild = oTMP Set oTMP = Nothing End Function |
|