본문 바로가기
카테고리 없음

Excel VBA DART API 기업 코드 다운로드 및 압축 해제 자동화

by 퍼포먼스마케팅코더 2024. 1. 30.
반응형

이번 포스트에서는 Excel VBA를 사용하여 DART API로부터 데이터를 다운로드하고 압축을 해제하는 과정을 소개합니다.
이 매크로는 특히 금융 및 회계 분야에서 유용하게 사용될 수 있습니다.

매크로의 주요 기능:

  1. DART API로부터 파일 다운로드: DART(금융감독원 전자공시시스템)로부터 고유 번호 파일을 다운로드합니다.
  2. 압축 파일 해제: 다운로드된 압축 파일을 지정된 폴더에 압축 해제합니다.
  3. 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
반응형

댓글