powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Чтение XML в MS Excel
2 сообщений из 2, страница 1 из 1
Чтение XML в MS Excel
    #39381635
Добрый день.
Подскажите пожалуйста, как правильно реализовать

Есть кусок 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
Чтение XML в MS Excel
    #39381654
сам спросил, сам отвечу :)

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


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