Microsoft Excel VBA에서 XML 구문 분석

Bilal Shahid 2023년6월21일
  1. XML 파서의 중요성
  2. VBA를 사용하여 XML 파서 구축
  3. 결론
Microsoft Excel VBA에서 XML 구문 분석

이 기사에서는 VBA에서 XML 파일을 구문 분석하는 방법을 알려줍니다.

XML 파서의 중요성

Microsoft Excel 사용자는 XML 파일 형식으로 일부 데이터를 받는 것이 일반적입니다. XML 파일에서 정보를 검색하고 요구 사항에 따라 시트 또는 VBA 매크로에서 사용해야 합니다.

이를 수행하는 방법은 이를 텍스트 파일로 처리하고 정보를 구문 분석하는 것입니다. 그러나 이것은 정보가 태그를 사용하여 잘 구조화되어 저장되고 이를 텍스트 파일로 취급하는 것은 이 개념을 부정하기 때문에 XML 파일을 구문 분석하는 우아한 방법이 아닙니다.

따라서 XML 파서를 사용해야 합니다. XML 파서는 XML 파일을 읽고 즉시 사용할 수 있도록 관련 데이터를 검색합니다.

VBA를 사용하여 XML 파서 구축

VBA를 사용하여 XML 파일을 구문 분석하고 데이터를 Excel 시트로 변환할 수 있습니다. 우리가 사용할 방법은 XML Document Object Model의 줄임말인 XML DOM 구현을 사용하며 이 모델을 사용하면 XML 파일을 필요에 따라 조작할 수 있는 개체로 나타낼 수 있습니다.

VBA를 통해 XML 파일 구문 분석을 시작하려면 간단한 일련의 단계를 수행해야 합니다. 아래에 설명되어 있습니다.

VBA를 통해 XML을 구문 분석하려면 시스템에 MSXML.4.0 이상이 있어야 합니다.

  • Microsoft XML에 대한 참조 추가

    먼저 VBA 편집기에서 Microsoft XML, V6.0에 대한 참조를 추가해야 합니다. 이것이 수행되는 방법입니다.

    Excel의 개발자 탭에서 VBA 편집기를 엽니다.

  • 메뉴에서 도구 > 참조로 이동합니다.

    참조로 이동

  • 아래로 스크롤하여 Microsoft XML, V6.0을 선택한 다음 확인을 클릭합니다.

    Microsoft XML V6.0 참조 추가

    Microsoft XML 버전은 운영 체제와 컴퓨터에 설치된 Microsoft Office에 따라 다릅니다.

  • VBA 코드를 작성하여 XML 파일을 XML DOM으로 로드

    다음 XML 파일이 있다고 가정합니다.

    <?xml version="1.0" encoding="ISO8859-1" ?>
    <menu>
    <food>
    <name> Halwa Puri </name>
    <price> $7.50 </price>
    <description> Halwa Puri is from Indian and Pakistani cuisines, having the sweet Halwa and the savory Puri which is a fried flatbread. </description>
    <calories> 900 </calories>
    </food>
    </menu>
    

    다음 코드를 사용하여 다음과 같은 방법으로 XML DOM 개체를 만들어 VBA를 통해 이 XML 파일을 구문 분석할 수 있습니다.

    Sub XMLParser()
    
    Dim xDoc As New MSXML2.DOMDocument60
    Dim node As IXMLDOMElement
    Set xDoc = New MSXML2.DOMDocument60
    
    With xDoc
    .async = False
    .validateOnParse = True
    
    If xDoc.Load("D:\VBA\example.xml") = False Then
    Debug.Print .parseError.reason, .parseError.ErrorCode
    Exit Sub
    End If
    
    Set node = xDoc.SelectSingleNode("//price")
    MsgBox node.Text
    End With
    
    End Sub
    

위의 코드에서 먼저 MSXML2.DOMDocument60 유형의 xDoc 변수를 생성했습니다. 여기서는 Microsoft XML 버전 6.0을 사용하고 있기 때문에 끝에 60을 추가했으며 60이 없으면 이 코드는 사용자 정의 유형을 찾을 수 없음이라는 컴파일 시간 오류를 생성합니다. .

다음으로 With 문을 사용하여 xDoc 변수로 작업하고 있음을 지정했습니다. .async 속성은 비동기 다운로드에 대한 권한을 정의하고 .validateOnParse 속성은 파서가 XML 문서의 유효성을 검사해야 하는지 여부를 나타냅니다.

그런 다음 .Load 기능을 사용하여 지정된 XML 파일을 DOM 변수로 로드합니다. 여기에서 경로와 파일 이름을 컴퓨터의 이름으로 변경할 수 있습니다.

다음 두 줄은 XML 파일이 제대로 로드되지 않은 경우 오류 처리를 위한 것입니다. 로딩이 제대로 되었는지 테스트하기 위해 파일에서 하나의 노드를 가져와 그 이름을 price로 지정합니다.

노드 이름은 대소문자를 구분하며 XML 파일에 따라 지정해야 합니다. 마지막으로 메시지 상자에 node.Text 속성을 사용하여 가격을 표시합니다.

출력:

XML DOM에 XML 파일 로드

이것은 로딩이 완벽하게 잘 작동했음을 보여줍니다.

XML 파일 데이터를 사용하는 한 가지 방법은 Excel 시트에 저장하는 것입니다. Excel 시트에 데이터를 저장하기 위해 위의 코드를 몇 가지 변경해 보겠습니다.

Sub XMLParser()

Dim xDoc As New MSXML2.DOMDocument60
Set xDoc = New MSXML2.DOMDocument60
Dim list As MSXML2.IXMLDOMNodeList
Dim osh As Worksheet
Set osh = ThisWorkbook.Sheets("Sheet1")
oRow = 1

With xDoc
.async = False
.validateOnParse = True

If xDoc.Load("D:\VBA\example.xml") = False Then
Debug.Print .parseError.reason, .parseError.ErrorCode
Exit Sub
End If

Set list = xDoc.SelectNodes("//price")
loopCount = 0
For Each node In list
oRow = oRow + 1
osh.Range("A" & oRow) = node.Text
Next
End With

End Sub

여기서는 모든 price 노드를 검색하여 시트에 저장합니다. 이 예에서는 다음과 같이 시트에 저장될 하나의 price 노드만 있습니다.

XML 파일 데이터를 사용하여 Excel 시트에 저장

XML 파일 및 요구 사항에 따라 코드를 조정할 수 있습니다.

결론

이것은 VBA를 통해 XML 파일을 구문 분석하는 방법에 대한 논의를 요약한 것입니다. 이 기사에서는 VBA에서 XML DOM을 사용하여 XML 파서를 구축하는 방법을 배웠습니다.

작가: Bilal Shahid
Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub