Добрый день.
Подскажите пожалуйста, как правильно реализовать
Есть кусок XML (пример ниже)
Читаю его в VBA (код скрипта ниже).
Проблема в том, что часть тегов может не содержать значения, например тег с name="M3" (CODE) содержит значение 111 только для третьей строки.
SelectNodes - если значение не задано, то оно пропускается (не записывается), т.о. массивы с1 - с4 разной длины.
Как сделать так, чтобы если значения в теге нет, в массив писался NULL?
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
Sub ReadXML()
Call ReadXMLByTags
End Sub
Function ReadXMLByTags()
Dim mainWorkBook As Workbook
Set mainWorkBook = ActiveWorkbook
mainWorkBook.Sheets("Результаты проверки").UsedRange.Clear
Set oXMLFile = CreateObject("Msxml2.DOMDocument")
oXMLFile.Load (ThisWorkbook.FullName)
Set c1 = oXMLFile.SelectNodes("/Workbook/Worksheet[0]/Table/Row/Cell[0]/Data/text()")
Set c2 = oXMLFile.SelectNodes("/Workbook/Worksheet[0]/Table/Row/Cell[1]/Data/text()")
Set c3 = oXMLFile.SelectNodes("/Workbook/Worksheet[0]/Table/Row/Cell[2]/Data/text()")
Set c4 = oXMLFile.SelectNodes("/Workbook/Worksheet[0]/Table/Row/Cell[3]/Data/text()")
For i = 0 To (c1.Length - 1)
v1 = c1(i).NodeValue
v2 = c2(i).NodeValue
v3 = c3(i).NodeValue
v4 = c4(i).NodeValue
mainWorkBook.Sheets("Результаты проверки").Range("A" & i + 1).Value = v1
mainWorkBook.Sheets("Результаты проверки").Range("B" & i + 1).Value = v2
mainWorkBook.Sheets("Результаты проверки").Range("C" & i + 1).Value = v3
mainWorkBook.Sheets("Результаты проверки").Range("D" & i + 1).Value = v4
Next
End Function
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
<Worksheet ss:Name="Отчет">
<Table ss:ExpandedColumnCount="37" ss:ExpandedRowCount="4" x:FullColumns="1" x:FullRows="1" ss:StyleID="s62">
<Row ss:AutoFitHeight="0" ss:Height="42.75">
<Cell type="CHAR" name="M1"><Data ss:Type="String">ID</Data></Cell>
<Cell type="CHAR" name="M2"><Data ss:Type="String">DATE</Data></Cell>
<Cell type="CHAR" name="M3"><Data ss:Type="String">CODE</Data></Cell>
<Cell type="CHAR" name="M4"><Data ss:Type="String">VAL</Data></Cell>
</Row>
<Row ss:AutoFitHeight="0" ss:Height="42.75">
<Cell type="NUMBER" name="M1"><Data ss:Type="String">1</Data></Cell>
<Cell type="DATE" name="M2"><Data ss:Type="String">01.01.2010</Data></Cell>
<Cell type="CHAR" name="M3"><Data ss:Type="String"></Data></Cell>
<Cell type="CHAR" name="M4"><Data ss:Type="String">23</Data></Cell>
</Row>
<Row ss:AutoFitHeight="0" ss:Height="42.75">
<Cell type="NUMBER" name="M1"><Data ss:Type="String">2</Data></Cell>
<Cell type="DATE" name="M2"><Data ss:Type="String">02.01.2010</Data></Cell>
<Cell type="CHAR" name="M3"><Data ss:Type="String"></Data></Cell>
<Cell type="CHAR" name="M4"><Data ss:Type="String">24</Data></Cell>
</Row>
<Row ss:AutoFitHeight="0" ss:Height="42.75">
<Cell type="NUMBER" name="M1"><Data ss:Type="String">3</Data></Cell>
<Cell type="DATE" name="M2"><Data ss:Type="String">03.01.2010</Data></Cell>
<Cell type="CHAR" name="M3"><Data ss:Type="String">111</Data></Cell>
<Cell type="CHAR" name="M4"><Data ss:Type="String">25</Data></Cell>
</Row>
</Table>