Гость
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Чтение XML в MS Excel / 2 сообщений из 2, страница 1 из 1
10.01.2017, 16:11
    #39381635
Чтение XML в MS Excel
Добрый день.
Подскажите пожалуйста, как правильно реализовать

Есть кусок XML (пример ниже)
Читаю его в VBA (код скрипта ниже).
Проблема в том, что часть тегов может не содержать значения, например тег с name="M3" (CODE) содержит значение 111 только для третьей строки.

SelectNodes - если значение не задано, то оно пропускается (не записывается), т.о. массивы с1 - с4 разной длины.

Как сделать так, чтобы если значения в теге нет, в массив писался NULL?


Код: vbnet
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



Код: xml
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>
...
Рейтинг: 0 / 0
10.01.2017, 16:21
    #39381654
Чтение XML в MS Excel
сам спросил, сам отвечу :)

если делать так, что все работает как надо, NULL не игнорируются
Set c4 = oXMLFile.SelectNodes("/Workbook/Worksheet[0]/Table/Row/Cell[3]/Data")
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Чтение XML в MS Excel / 2 сообщений из 2, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]