1

Тема: Создание файла config.xml, используя таблицу Excel.

Будьте добры, помогите.
Мне нужно написать скрипт VBA, который будет создавать файлик config.xml следующего формата, использую таблицу из excel.

Формат готового файла.
<Signals>
<Signal Name="ZDV1_Open" Type="Bool">
<Properties>
<Property Name="Description" Type="String" Value="Задвижка 1 - открыта" />
<Property Name="Address" Type="UInt" Value="4001" />
<Property Name="BitPosition" Type="Byte" Value="0" />
</Properties>
</Signal>
<Signal Name="ZDV1_Close" Type="Bool">
<Properties>
<Property Name="Description" Type="String" Value="Задвижка 1 - закрыта" />
<Property Name="Address" Type="UInt" Value="4001" />
<Property Name="BitPosition" Type="Byte" Value="1" />
</Properties>
</Signal>
<Signal Name="ZDV2_Open" Type="Bool">
<Properties>
<Property Name="Description" Type="String" Value="Задвижка 2 - открыта" />
<Property Name="Address" Type="UInt" Value="4001" />
<Property Name="BitPosition" Type="Byte" Value="2" />
</Properties>
</Signal>
<Signal Name="ZDV2_Close" Type="Bool">
<Properties>
<Property Name="Description" Type="String" Value="Задвижка 2 - закрыта" />
<Property Name="Address" Type="UInt" Value="4001" />
<Property Name="BitPosition" Type="Byte" Value="3" />
</Properties>
</Signal>
<Signal Name="RES21_Temp" Type="Float">
<Properties>
<Property Name="Description" Type="String" Value="Температура в резервуаре 21" />
<Property Name="Address" Type="UInt" Value="4100" />
</Properties>
</Signal>
<Signal Name="RES21_Level" Type="Float">
<Properties>
<Property Name="Description" Type="String" Value="Уровень в резервуаре 21" />
<Property Name="Address" Type="UInt" Value="4101" />
</Properties>
</Signal>
<Signal Name="RES21_Speed" Type="Float">
<Properties>
<Property Name="Description" Type="String" Value="Скорость наполнения в резервуаре 21" />
<Property Name="Address" Type="UInt" Value="4102" />
</Properties>
</Signal>
</Signals>

2

Re: Создание файла config.xml, используя таблицу Excel.

С использованием Microsoft.XMLDOM:

Sub ViaXMLDOM()
    Dim XMLDoc, Cell
    Set XMLDoc = CreateObject("Microsoft.XMLDOM")
    With XMLDoc.appendchild(XMLDoc.createElement("Signals"))
        For Each Cell In Range("A2:A65536")
            If Cell.Value = "" Then Exit For
            With .appendchild(XMLDoc.createElement("Signal"))
                .setAttribute "Name", Cells(Cell.Row, 1).Value
                .setAttribute "Type", Cells(Cell.Row, 3).Value
                With .appendchild(XMLDoc.createElement("Properties"))
                    With .appendchild(XMLDoc.createElement("Property"))
                        .setAttribute "Name", "Description"
                        .setAttribute "Type", "String"
                        .setAttribute "Value", Cells(Cell.Row, 2).Value
                    End With
                    With .appendchild(XMLDoc.createElement("Property"))
                        .setAttribute "Name", "Address"
                        .setAttribute "Type", "UInt"
                        .setAttribute "Value", Cells(Cell.Row, 4).Value
                    End With
                    If Cells(Cell.Row, 5).Value <> Empty Then
                        With .appendchild(XMLDoc.createElement("Property"))
                        .setAttribute "Name", "BitPosition"
                        .setAttribute "Type", "Byte"
                        .setAttribute "Value", Cells(Cell.Row, 5).Value
                        End With
                    End If
                End With
            End With
        Next
    End With
    XMLDoc.Save ThisWorkbook.Path & "\config.xml"
    Set XMLDoc = Nothing
    MsgBox "Saved to " & ThisWorkbook.Path & "\config.xml"
End Sub

И кустарным методом:

Sub HandyCraft()
    Dim Cell, XMLText
    XMLText = "<Signals>" & vbCrLf
    For Each Cell In Range("A2:A65536")
        If Cell.Value = "" Then Exit For
        XMLText = XMLText & vbTab & "<Signal Name=""" & Cells(Cell.Row, 1).Value & """ Type=""" & Cells(Cell.Row, 3).Value & """>" & vbCrLf & vbTab & vbTab & "<Properties>" & vbCrLf
        XMLText = XMLText & vbTab & vbTab & vbTab & "<Property Name=""Description"" Type=""String"" Value=""" & Cells(Cell.Row, 2).Value & """ />" & vbCrLf
        XMLText = XMLText & vbTab & vbTab & vbTab & "<Property Name=""Address"" Type=""UInt"" Value=""" & Cells(Cell.Row, 4).Value & """ />" & vbCrLf
        If Cells(Cell.Row, 5).Value <> Empty Then XMLText = XMLText & vbTab & vbTab & vbTab & "<Property Name=""BitPosition"" Type=""Byte"" Value=""" & Cells(Cell.Row, 5).Value & """ />" & vbCrLf
        XMLText = XMLText & vbTab & vbTab & "</Properties>" & vbCrLf & vbTab & "</Signal>" & vbCrLf
    Next
    XMLText = XMLText & "</Signals>" & vbCrLf
    With CreateObject("Scripting.FileSystemObject").CreateTextFile(ThisWorkbook.Path & "\config.xml", True)
        .Write (XMLText)
        .Close
    End With
    MsgBox "Saved to " & ThisWorkbook.Path & "\config.xml"
End Sub

smax, раскройте секрет,  что за тесты?

Щт Уккщк Куыгьу Туче
’ҐЄгй п Є®¤®ў п бва Ёж : 1251

3

Re: Создание файла config.xml, используя таблицу Excel.

Спасибо. Да, по учебе.