ExcelVBA에서 HTTP 액세스하여 XML 데이터 가져오기
5780 단어 ExcelVBA
소개
2017년 5월부터 신세를 지고 있는, 나의 새로운 직장은, Excel을 좋아하는 집단이었습니다. 몇 년 만에 저도 ExcelVBA를 사용하게되었습니다. 복습한 것을 조금씩 Qiita에 투고하고 싶습니다.
이번에는 ExcelVBA에서 웹 API에 액세스하여 XML 데이터를 가져 와서 시트에 반영하고 싶습니다. 위키피디아의 「최근에 갱신된 기사의 타이틀」을 취득하고 있습니다.
실제 XML 코드를보고 싶다면 => 여기를 클릭
준비 작업
내 PC 환경은 다음과 같습니다.
내 PC 환경은 다음과 같습니다.
건너뛰기(이번에는 할애)
다음은, 독자는 할 수 있는 or 이해하고 있는 것으로 합니다.
반드시 할 일
개발 리본에서 Visual Basic 아이콘을 클릭하여 Visual Basic for Applications를 시작합니다. 도구 메뉴에서 도구 참조 설정을 클릭합니다.
등장한 참조 설정 대화상자에서
Microsoft XML, v6.0
를 찾아 체크합니다.실제 VBA 코드
Option Explicit
Sub Main()
'変数の宣言
Dim http As XMLHTTP60
Dim doc As DOMDocument60
Dim node As IXMLDOMNode
Dim url As String
Dim i As Integer
'HTTPアクセスを設定して発射
Set http = New XMLHTTP60
url = "https://ja.wikipedia.org/w/api.php?action=query&list=recentchanges&rcnamespace=0&format=xml"
http.Open "GET", url, False
http.send
'HTTPアクセスに失敗があったら中止
If http.statusText <> "OK" Then
MsgBox "サーバーへの接続に失敗しました", vbCritical
Exit Sub
End If
'XMLデータを取り込む
Set doc = New DOMDocument60
doc.LoadXML (http.responseText)
'XPathを使ってノード(要素)を取り込む
i = 1
For Each node In doc.SelectNodes("//rc")
'各ノードのtitle属性を取得して、シートに貼り付ける
ActiveSheet.Range("A" & i + 2).Value = i & ": " & node.Attributes.getNamedItem("title").Text
i = i + 1
Next
'後片付け
Set http = Nothing
Set doc = Nothing
Set node = Nothing
End Sub
마지막으로
불행히도 ExcelVBA에서 데이터 형식은 기본적으로 XML입니다. JSON은 투영처럼 보입니다. 코드가 복잡해지는 것을 피하기 위해서, 서버측도, XML로 만들어 가려고 생각합니다.
Reference
이 문제에 관하여(ExcelVBA에서 HTTP 액세스하여 XML 데이터 가져오기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/isamusuzuki/items/b2e88184e7cfb75877a8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Option Explicit
Sub Main()
'変数の宣言
Dim http As XMLHTTP60
Dim doc As DOMDocument60
Dim node As IXMLDOMNode
Dim url As String
Dim i As Integer
'HTTPアクセスを設定して発射
Set http = New XMLHTTP60
url = "https://ja.wikipedia.org/w/api.php?action=query&list=recentchanges&rcnamespace=0&format=xml"
http.Open "GET", url, False
http.send
'HTTPアクセスに失敗があったら中止
If http.statusText <> "OK" Then
MsgBox "サーバーへの接続に失敗しました", vbCritical
Exit Sub
End If
'XMLデータを取り込む
Set doc = New DOMDocument60
doc.LoadXML (http.responseText)
'XPathを使ってノード(要素)を取り込む
i = 1
For Each node In doc.SelectNodes("//rc")
'各ノードのtitle属性を取得して、シートに貼り付ける
ActiveSheet.Range("A" & i + 2).Value = i & ": " & node.Attributes.getNamedItem("title").Text
i = i + 1
Next
'後片付け
Set http = Nothing
Set doc = Nothing
Set node = Nothing
End Sub
불행히도 ExcelVBA에서 데이터 형식은 기본적으로 XML입니다. JSON은 투영처럼 보입니다. 코드가 복잡해지는 것을 피하기 위해서, 서버측도, XML로 만들어 가려고 생각합니다.
Reference
이 문제에 관하여(ExcelVBA에서 HTTP 액세스하여 XML 데이터 가져오기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/isamusuzuki/items/b2e88184e7cfb75877a8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)