반응형
이번 포스트에서는 Excel VBA를 사용하여 DART API로부터 데이터를 다운로드하고 압축을 해제하는 과정을 소개합니다.
이 매크로는 특히 금융 및 회계 분야에서 유용하게 사용될 수 있습니다.
매크로의 주요 기능:
- DART API로부터 파일 다운로드: DART(금융감독원 전자공시시스템)로부터 고유 번호 파일을 다운로드합니다.
- 압축 파일 해제: 다운로드된 압축 파일을 지정된 폴더에 압축 해제합니다.
- XML 파일 표시: 압축 해제된 XML 파일을 Excel에서 직접 열어 볼 수 있습니다.
구현 단계:
1. 타이머 설정:
작업의 시작과 끝 시간을 측정하여 전체 실행 시간을 계산합니다.
2. 필요한 변수 선언:
- API URL, ZIP 파일 경로, 압축 해제 폴더 경로, XML 파일 경로를 설정합니다.
- HTTP 요청과 압축 해제를 위한 객체를 선언합니다.
3. 기존 XML 파일 삭제:
이전에 다운로드된 CORPCODE.xml 파일이 있다면 삭제합니다.
4. HTTP 요청 및 파일 저장:
- XMLHTTP 객체를 사용하여 DART API에서 데이터를 요청합니다.
- 요청이 성공하면 응답 바디를 이용하여 ZIP 파일로 저장합니다.
5. ZIP 파일 압축 해제:
- Shell.Application 객체를 사용하여 ZIP 파일을 지정된 폴더에 압축 해제합니다.
6. XML 파일 열기:
- 압축 해제된 XML 파일을 Excel에서 직접 열어 데이터를 확인합니다.
7. 타이머 종료 및 실행 시간 출력:
전체 작업의 실행 시간을 초 단위로 출력합니다.
추가 기능: DisplayXmlInExcel 매크로
XML 파일을 새 Excel 워크북에서 바로 열 수 있는 추가적인 매크로도 포함되어 있습니다.
필요한 경우, 이 매크로를 통해 XML 데이터를 더 쉽게 관리하고 분석할 수 있습니다.
아래는 전체 vba 코드입니다.
Sub DownloadAndUnzipDartCode()
Dim startTime As Double
Dim endTime As Double
' 타이머 시작
startTime = Timer
' 이 매크로는 DART API를 사용하여 고유 번호 파일을 다운로드하고 압축을 해제합니다.
Const url As String = "https://opendart.fss.or.kr/api/corpCode.xml?crtfc_key=your_api_key"
Const zipFilePath As String = "C:\down\dsd_html\dartcode.zip"
Const extractFolderPath As String = "C:\down\dsd_html\"
Const xmlFilePath As String = "C:\down\dsd_html\CORPCODE.xml"
Dim httpRequest As Object
Dim fileType() As Byte
Dim shellApp As Object
' 기존 CORPCODE.xml 파일이 존재하면 삭제
If Dir(xmlFilePath) <> "" Then Kill xmlFilePath
' HTTP 요청을 위한 XMLHTTP 객체 초기화
Set httpRequest = CreateObject("MSXML2.XMLHTTP")
With httpRequest
.Open "GET", url, False
.Send
If .Status = 200 Then
' 파일 저장
Open zipFilePath For Binary Access Write As #1
fileType = .ResponseBody
Put #1, , fileType
Close #1
' 압축 해제
Set shellApp = CreateObject("Shell.Application")
shellApp.Namespace(extractFolderPath).CopyHere shellApp.Namespace(zipFilePath).Items
Else
MsgBox "연결 중 오류가 발생했습니다.", vbCritical
End If
End With
' CORPCODE.xml 파일을 현재 활성화된 엑셀 파일에 표시
If Dir(xmlFilePath) <> "" Then
DisplayXmlInExcel xmlFilePath
End If
Set httpRequest = Nothing
Set shellApp = Nothing
' 타이머 종료 및 실행 시간 출력
endTime = Timer
Debug.Print "DownloadAndUnzipDartCode 실행 시간: " & Format(endTime - startTime, "0.000") & " 초"
End Sub
Sub DisplayXmlInExcel(xmlFilePath As String)
' 새 엑셀 파일을 열어 XML 파일을 바로 여는 매크로
Dim mWorkbook As Workbook
' XML 파일을 새 워크북에서 열기
Set mWorkbook = Workbooks.OpenXML(Filename:=xmlFilePath, LoadOption:=xlXmlLoadImportToList)
' 필요하다면 추가적인 설정을 여기에 작성하세요.
' 예: mWorkbook.Sheets(1).Name = "XML Data"
End Sub
반응형
댓글