2015-09-01 9 views
0

Я пытаюсь импортировать данные из файла XML, как это:Как импортировать данные XML с помощью Excel VBA?

<library> 
<book> 
<title>aaa</title> 
<author>aaa-author</author> 
</book> 
<book> 
<title>bbb</title> 
<author>bbb-author</author> 
</book> 
<book> 
<title>ccc</title> 
</book> 
</library> 

(обратите внимание, что третья книга не имеет никакого значения для автора)

Я хотел бы получить таблицу Excel, где каждый данные книги отображаются в одной строке. Проблема в том, что я не понимаю, как мне нужно зацикливаться на узлах книги, чтобы получить их дочерние значения.

Я работаю над кодом, как это:

Set mainWorkBook = ActiveWorkbook 
Set oXMLFile = CreateObject("Microsoft.XMLDOM") 
XMLFileName = "C:\example.xml" 
oXMLFile.Load (XMLFileName) 
Set Books = oXMLFile.SelectNodes("/book") 
For i = 0 To (Books.Length - 1) 
    ' I cannot understand this part 
Next 

ответ

3

Добавить ссылку (Tools -> Список использованной литературы ...) в Microsoft XML 6.0. Это позволит вам ввести типизированные переменные (Dim book As IXMLDOMNode), которые предоставят вам Intellisense.

Затем вы можете использовать следующий код, который перебирает все book элементов, сохраняет title и author в 2 одномерный массив (если они имеются), затем вставляет массив в таблицу Excel:

Dim oXMLFile As New DOMDocument60 
Dim books As IXMLDOMNodeList 
Dim results() As String 
Dim i As Integer, booksUBound As Integer 
Dim book As IXMLDOMNode, title As IXMLDOMNode, author As IXMLDOMNode 

'Load XML from the file 
oXMLFile.Load "C:\example.xml" 

'Get a list of book elements 
Set books = oXMLFile.SelectNodes("/library/book") 
booksUBound = books.Length - 1 

'Create a two-dimensional array to hold the results 
ReDim results(booksUBound, 1) 

'Iterate through all the book elements, putting the title and author into the array, when available 
For i = 0 To booksUBound 
    Set book = books(i) 'A For Each loop would do this automatically, but we need the 
         'index to put the values in the right place in the array 
    Set title = book.SelectSingleNode("title") 
    If Not title Is Nothing Then results(i, 0) = title.Text 
    Set author = book.SelectSingleNode("author") 
    If Not author Is Nothing Then results(i, 1) = author.Text 
Next 

'Paste the results into the worksheet 
Dim wks As Worksheet 
Set wks = ActiveSheet 
wks.Range(wks.Cells(1, 1), wks.Cells(books.Length, 2)) = results 

Ссылки:

Ссылки:

+0

спасибо за очень подробный ответ! – lorenzo

Смежные вопросы