개발을 하다보면 영업일을 계산해야 하는 경우가 생기는데요.
공공데이터 API 활용해서 아래와 같은 1년치 영업일리스트 생성을 해보겠습니다~
25년도 설날 추석이 개꿀이네요.. 다들 힘내봅시다..
Result 로 얻은 데이터를 미리 보자면 아래와 같은 휴일리스트를 받아올 수 있습니다.
아래 데이터와 함께 살짝 가공만해서 1년 전체 영업일 리스트를 엑셀로 생성해 보겠습니다.
우선 사용하는 API는 아래 링크에서 정보를 가져올게용
https://www.data.go.kr/data/15012690/openapi.do
한국천문연구원_특일 정보
(천문우주정보)국경일정보, 공휴일정보, 기념일정보, 24절기정보, 잡절정보를 조회하는 서비스 입니다. 활용시 날짜, 순번, 특일정보의 분류, 공공기관 휴일 여부, 명칭을 확인할 수 있습니다.
www.data.go.kr
들어가면 아래같은 페이지가 보이는데 회원가입, 로그인하고 활용신청 눌러주시면 됩니다.
활용신청 하고 필요한건 API Service Key 만 받으면 됩니다.
무료이고 신청만 하면 바로 발급받을 수 있습니다.
신청하고 마이페이지에 들어가면 아래와 같은 화면에서 인증키를 확인할 수 있습니다. 인증키가 Service Key 입니다ㅇㅇ
이제 Uipath 에서 만들어봅시다.
양식은 아래와 같이 미리 만들었습니다. 데이터를 채우기만하면 됩니다.
API 호출하기 위해서 Uipath.WebApi.Activities 의존성을 추가해주고...
변수는 아래와 같이 설정해 줍니다.
date작업일 = Now.AddYears(1)
str영업일리스트양식 = "Data\영업일리스트양식.xlsx"
strAPI_URL = "http://apis.data.go.kr/B090041/openapi/service/SpcdeInfoService/getHoliDeInfo?solYear={0}&ServiceKey={1}&numOfRows=100"
strServiceKey = "사용자 개인 Service Key"
str영업일리스트파일 = Path.Combine("Result", "영업일리스트_" + date작업일.ToString("yyyy") + ".xlsx")
폴더경로는 프로잭트 내에 상대경로 폴더 입니다. Data, Result 폴더 미리 만들어 두었습니다.
API_URL 은 endpoint 입니다.
"http://apis.data.go.kr/B090041/openapi/service/SpcdeInfoService" 기본 end point이고 뒤에는 사용하려는
"getHoliDeInfo" 오퍼레이션명.
그 뒤는 필수 인자 값입니다. 중괄호로 감싼 이유는 뒤에 String.format으로 변수 넣어줄거에요.
오퍼레이션 종류를 해당 사이트 매뉴얼을 참조해 보면 아래와 같습니다.
일련번호 | 서비스명(국문) | 오퍼레이션명(영문) | 오퍼레이션명(국문) |
1 | 특일 정보제공 서비스 | getHoliDeInfo | 국경일 정보조회 |
2 | getRestDeInfo | 공휴일 정보조회 | |
3 | getAnniversaryInfo | 기념일 정보조회 | |
4 | get24DivisionsInfo | 24절기 정보조회 | |
5 | getSundryDayInfo | 잡절 정보조회 |
인수값의 종류를 보면 아래와 같은데 "numOfRows=100"은 result 휴일정보의 max 개수 입니다.
보통 1년에 주말 제외 휴일은 20일이 넘어가지 않으니 30까지만 해주면 충분할 듯 합니다. defualt 는 10이니 설정 안 해주면 6월까지 휴일만 가져올 듯 합니다.
그냥 넉넉하게 100개 박아줍니다. 희망사항...
항목명(영문) | 항목명(국문) | 항목크기 | 항목구분 | 샘플데이터 | 항목설명 |
solYear | 연 | 4 | 1 | 2019 | 연 |
solMonth | 월 | 2 | 0 | 03 | 월 |
ServiceKey | 서비스키 | 1 | 발급받은 서비스키 | ||
_type | json 타입 (디폴트 XML) |
0 | json | json 타입으로 활용시 추가 | |
numOfRows | 한페이지 결과 수 | 0 | 20 | 한페이지에 모든 결과를 확인할 때 추가(디폴트 10) |
다음 Uipath 작업은 테이블 하나 생성해서 Http Request 써서 결과받아오고 Deserialize XML 하고 테이블에 변수 담아주면 됩니다.
우선 양식 복붙하고 테이블 하나 생성합니다.
API 호출하고 체크해줍니다.
Http Request 에는 input에 Request URL 부분과 Output에 Response content, Response status 부분과 변수 넣어 줬습니다.
다음에는 Deserialize XML 에 위에받은 input 에 Result 변수 넣어주고 output에 outResult 변수 생성해서 넣어줍니다.
그리고 for each 돌리면 되는데 아래 element 계층으로 내려가면 우리가 원하는 값을 얻을 수 있습니다.
디버깅 하면서 local variable 확인해보면 아래와 같은걸 확인해서 element 선택해 주면 됩니다.
for each 의 body 부분은 아래와 같이 선언해서 데이터 테이블에 넣었습니다.
그리고 휴일참조 리스트에 데이터를 먼저 write 했습니다.
참고로 아래 휴일리스트는 휴일정보만 나왔을 뿐 1년치 날짜 정보가 모두 있는건 아닙니다.
완전한 1년치 데이터를 만들기 위해 vba 를 살짝 썼습니다.
Function 영업일채우기(str해당연도 As String) As String
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim wb As Workbook
Dim ws영업일리스트 As Worksheet, ws휴일참조 As Worksheet
Set wb = ThisWorkbook
Set ws영업일리스트 = wb.Sheets("영업일리스트")
Set ws휴일참조 = wb.Sheets("휴일참조")
Dim d As Date
Dim i As Long
i = 2
For d = DateSerial(str해당연도, 1, 1) To DateSerial(str해당연도, 12, 31)
ws영업일리스트.Range("a" & i) = Format(d, "yyyyMMdd")
If Weekday(d) = 1 Then
ws영업일리스트.Range("b" & i) = 0
ws영업일리스트.Range("c" & i) = "일요일"
ElseIf Weekday(d) = 7 Then
ws영업일리스트.Range("b" & i) = 0
ws영업일리스트.Range("c" & i) = "토요일"
Else
ws영업일리스트.Range("b" & i) = 1
End If
i = i + 1
Next
Dim rng찾음 As Range
'휴일 업데이트
For i = 2 To ws휴일참조.UsedRange.Rows.Count
Set rng찾음 = ws영업일리스트.Columns(1).Find(what:=ws휴일참조.Range("a" & i).Value, lookat:=xlWhole)
'영업일여부
If rng찾음.Offset(, 1) <> 0 Then
rng찾음.Offset(, 1) = ws휴일참조.Range("b" & i)
End If
'비고
If rng찾음.Offset(, 2) = "" Then
rng찾음.Offset(, 2) = ws휴일참조.Range("c" & i)
Else
rng찾음.Offset(, 2) = rng찾음.Offset(, 2) & "," & ws휴일참조.Range("c" & i)
End If
Next
ws영업일리스트.Activate
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Function
Sub test()
Dim str해당연도 As String
str해당연도 = "2025"
Debug.Print 영업일채우기(str해당연도)
End Sub
이렇게 까지 돌리면 몇초사이에 영업일 달력이 생성됩니다~
혹시 똑같은 예제 소스파일 필요하시면 말씀해 주세요~
'[RPA]' 카테고리의 다른 글
[SAP Build Process Automation] API Trigger 실행(Postman 테스트까지) (0) | 2025.01.10 |
---|---|
[Uipath] Datatable column to Array(컬럼값을 배열로) (0) | 2023.08.04 |
[Uipath] 이전에 배포한(Publish) 프로잭트 버전 소스 찾기(백업 소스) (2) | 2023.08.04 |
[Uipath][데이터 가공]Datatable Select(유의사항)The source contains no DataRows. (0) | 2023.08.04 |
[Uipath][데이터 가공]Datatable Select (0) | 2023.08.03 |