<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; vba: не выкладывается xml в Excel]]></title>
	<link rel="self" href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=13863&amp;type=atom" />
	<updated>2018-06-20T21:17:44Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=13863</id>
		<entry>
			<title type="html"><![CDATA[Re: vba: не выкладывается xml в Excel]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=126298#p126298" />
			<content type="html"><![CDATA[<p><strong>vas.crilov</strong>, присоединяюсь к вопросу <strong>alexii</strong>. Для меня тоже не совсем ясна идея, в каком виде Вы хотите вывести информацию на листе, поэтому сделал пример в базовом виде с рекурсивным перебором и выводом <strong>baseName</strong> и <strong>text</strong> и добавил комментарии. Надеюсь это поможет в Вашей задаче.</p><p>Скриншот результата:<br /></p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header" data-lang-open="открыть спойлер" data-lang-close="скрыть спойлер"><strong>+</strong>&nbsp;открыть спойлер</div><div class="fancy_spoiler"><p><span class="postimg"><img src="https://i.imgur.com/naCENSl.png" alt="https://i.imgur.com/naCENSl.png" /></span></p></div></div><div class="codebox"><pre><code>
&#039;Создание объекта парсера библиотеки Microsoft XML v6.0
Dim Doc As New MSXML2.DOMDocument60
&#039;Объект для хранения ссылки на активный лист
Dim Sheet As Worksheet

&#039;Главная процедура
Sub Main()
    &#039;Получение ссылки на первый лист активной книги
    Set Sheet = ActiveWorkbook.Sheets(1)
    &#039;Отключение асинхронной загрузки документа
    Doc.async = False
    &#039;Загрузка данных с ресурса с проверкой успешности загрузки
    If Not Doc.Load(&quot;https://websvcgatewayx2.frbny.org/autorates_tomo_external/services/v1_0/tomo/retrieveHistoricalXml?f=06192018&amp;t=06202018&amp;ctt=true&amp;&amp;cta=true&amp;ctm=true&quot;) Then
        Debug.Print &quot;Resource load failed&quot;
        Exit Sub
    End If
    
    With Sheet.Cells
        &#039;Очистка листа
        .ClearContents
        &#039;Заполнение заголовков на листе
        .Item(1, 1) = &quot;BASENAME&quot;
        .Item(1, 2) = &quot;TEXT&quot;
    End With
    &#039;Установка жирного шрифта
    Sheet.Rows(1).Font.Bold = True
    &#039;Передача ссылки на базовый тег документа в процедуру рекурсивного перебора тегов (второй параметр порядковый номер строки с которой начнётся заполнение листа.)
    RecursiveScanNode Doc.DocumentElement, 2
End Sub

&#039;Процедура рекурсивного перебора
Sub RecursiveScanNode(node As MSXML2.IXMLDOMNode, i As Long)  &#039; As MSXML2.IXMLDOMNode)
    &#039;Переменная для итеративного получения ссылки на дочерние элементы переданного node
    Dim ChildNode As IXMLDOMNode
    &#039;Проверка, что текущий элемент является ветвью (а не текстовым блоком, комментарием, или процессинговой инструкцией и т.п.)
    If node.NodeType = NODE_ELEMENT Then
        &#039;Создание записи на листе
        &#039;Получение базового имени элемента
        Sheet.Cells(i, 1) = node.BaseName
        &#039;Получение текста элемента
        Sheet.Cells(i, 2) = GetNodeText(node)
        i = i + 1
        For Each ChildNode In node.ChildNodes
            RecursiveScanNode ChildNode, i
        Next
    End If
End Sub

&#039;Функция получения текста элемента исключая текст дочерних элементов
Function GetNodeText(node As IXMLDOMNode) As String
    Dim ChildNode As IXMLDOMNode
    For Each ChildNode In node.ChildNodes
        If ChildNode.NodeType = NODE_TEXT Then GetNodeText = GetNodeText &amp; ChildNode.Text
    Next
End Function
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2018-06-20T21:17:44Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=126298#p126298</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: vba: не выкладывается xml в Excel]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=126276#p126276" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>vas.crilov пишет:</cite><blockquote><div class="codebox"><pre><code>ThisWorkbook.Sheets(1).Cells(1, iCol) = xmlData.BaseName
ThisWorkbook.Sheets(1).Cells(iRow, iCol) = xmlData.Text</code></pre></div></blockquote></div><p>Здесь Вы на первом проходе пишете в одну и ту же ячейку (1;1). Зачем? Куда что на самом деле надо писать?</p><p>Что Вы вообще хотите получить?</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2018-06-20T13:18:56Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=126276#p126276</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[vba: не выкладывается xml в Excel]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=126251#p126251" />
			<content type="html"><![CDATA[<p>Пытаюсь загрузить на лист xlsx xml из интернета вот этим кодом</p><div class="codebox"><pre><code>Sub impRRP()

Dim iRow As Integer, iCol As Integer
    Dim xmlDoc As MSXML2.DOMDocument, xmlRoot As MSXML2.IXMLDOMNode
    Dim xmlNodes As MSXML2.IXMLDOMNode, xmlData As MSXML2.IXMLDOMNode
    Set xmlDoc = New MSXML2.DOMDocument
    
    xmlDoc.async = False
    xmlDoc.validateOnParse = False
    xmlDoc.Load (&quot;https://websvcgatewayx2.frbny.org/autorates_tomo_external/services/v1_0/tomo/retrieveHistoricalXml?f=06192018&amp;t=06202018&amp;ctt=true&amp;&amp;cta=true&amp;ctm=true&quot;)

    Set xmlRoot = xmlDoc.DocumentElement
    Set xmlNodes = xmlRoot.FirstChild

    iRow = 0
    For Each xmlNodes In xmlRoot.ChildNodes
        iRow = iRow + 1
        iCol = 0
        For Each xmlData In xmlNodes.ChildNodes
            iCol = iCol + 1
            ThisWorkbook.Sheets(1).Cells(1, iCol) = xmlData.BaseName
            ThisWorkbook.Sheets(1).Cells(iRow, iCol) = xmlData.Text
        Next xmlData
    Next xmlNodes

End Sub</code></pre></div><p>выдает какую то куцую одну строчку. Не могу понять, где ошибка. Помогите пожалуйста.</p>]]></content>
			<author>
				<name><![CDATA[vas.crilov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=39337</uri>
			</author>
			<updated>2018-06-20T07:37:55Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=126251#p126251</id>
		</entry>
</feed>
