Python

Python을 활용한 업무 자동화 예제 [Excel 파일 생성, 데이터 to Excel]

Yukart 2025. 3. 19. 19:42
반응형

1. 개요

현대 IT 환경에서 데이터는 다양한 형식으로 존재합니다. JSON, XML, OData 등 여러 형태로 API 응답이 오는데, 이를 분석하거나 보고서로 만들 때 가장 보편적으로 사용하는 도구가 바로 Excel입니다. 물론 온라인 변환기 사이트가 많이 있지만, 광고와 하루 횟수 제한으로 인해 굉장히 불편한 것이 현실입니다. 그래서 이런 제약 없이 자유롭게 사용할 수 있는 '엑셀 헬퍼'를 만들게 되었습니다.

  • JSON, XML, OData(v2/v4) 데이터를 엑셀 형식으로 변환
  • 데이터에서 자동으로 헤더 추출
  • 사용자 정의 헤더 지원
  • 스타일이 적용된 깔끔한 엑셀 파일 생성

2. create_excel_ex: 엑셀 예제 파일 생성

create_excel_ex.py는 헤더와 데이터를 받아 스타일이 적용된 엑셀 파일을 생성합니다.

def create_excel_with_headers(title, headers, data_rows=None, parent=None):
    # 파일 저장 경로 선택
    download_folder = os.path.expanduser("~/Downloads")
    timestamp = datetime.now().strftime("%Y%m%d")
    default_filename = f"{title}_{timestamp}.xlsx"

    filepath = filedialog.asksaveasfilename(
        initialdir=download_folder,
        initialfile=default_filename,
        defaultextension=".xlsx",
        filetypes=[("Excel 파일", "*.xlsx"), ("모든 파일", "*.*")]
    )

    if not filepath:
        return None  # 사용자가 취소함

    # 엑셀 파일 생성
    success = generate_excel(filepath, title, headers, data_rows)

    if success:
        messagebox.showinfo("성공", f"엑셀 파일이 생성되었습니다.\n{filepath}")
        return filepath

    return None

이 모듈은 다음과 같은 특징을 가집니다:

  • 파일명에 타임스탬프를 추가하여 중복 방지
  • 사용자 친화적인 파일 저장 대화상자
  • 자동으로 헤더 스타일링 (굵은 글씨, 중앙 정렬, 배경색)
  • 테두리와 필터 자동 적용
  • 열 너비 자동 조정

3. convert_json_excel: JSON

JSON은 현대 API의 표준 응답 형식입니다. convert_json_excel.py 모듈은 이러한 JSON 데이터를 엑셀 형식으로 변환해줍니다.

def parse_json_text(json_text):
    """JSON 텍스트 파싱"""
    try:
        json_data = json.loads(json_text)

        # 배열이 아닌 경우 배열로 변환
        if not isinstance(json_data, list):
            json_data = [json_data]

        return json_data, None
    except json.JSONDecodeError:
        return None, "유효한 JSON 형식이 아닙니다."
    except Exception as e:
        return None, f"오류: {str(e)}"

이 모듈의 주요 기능은:

  • 단일 객체와 배열 모두 처리 가능
  • 자동으로 JSON 객체에서 키를 추출하여 헤더로 사용
  • 중첩된 객체나 배열도 문자열로 변환하여 처리

작동 방식을 간단히 설명하자면:

  1. JSON 텍스트를 파싱하여 Python 객체로 변환
  2. 첫 번째 객체에서 키를 추출하여 헤더로 사용
  3. 각 객체의 값을 행 데이터로 변환 (중첩 구조는 문자열화)

4. convert_odata4_excel: OData v4

OData는 RESTful API를 위한 프로토콜로, 특히 SAP 시스템에서 많이 사용됩니다. convert_odata4_excel.py는 OData v4 응답을 처리합니다.

def parse_odata4_text(odata_text):
    """OData 4.0 응답 텍스트 파싱"""
    try:
        odata_data = json.loads(odata_text)

        # OData v4 응답 구조 확인
        if not isinstance(odata_data, dict):
            return None, "OData 응답은 객체 형태여야 합니다."

        # 데이터 항목 추출 - OData v4는 보통 value 속성에 데이터 배열이 있음
        if "value" in odata_data and isinstance(odata_data["value"], list):
            return odata_data["value"], None

        # value 속성이 없는 경우 (단일 엔터티 응답일 수 있음)
        if "value" not in odata_data:
            # 단일 엔터티는 배열로 변환
            return [odata_data], None

        return None, "OData 응답에서 데이터를 찾을 수 없습니다."
    except json.JSONDecodeError:
        return None, "유효한 JSON 형식이 아닙니다."
    except Exception as e:
        return None, f"오류: {str(e)}"

이 모듈의 주요 특징:

  • OData v4 응답 구조(value 배열) 자동 인식
  • @odata. 접두사가 있는 메타데이터 필드 자동 제외
  • 단일 엔터티와 컬렉션 응답 모두 처리

5. convert_xml_excel: XML

XML은 여전히 많은 시스템에서 사용되는 데이터 형식입니다. convert_xml_excel.py는 XML 데이터를 엑셀 형식으로 변환합니다.

def find_repeating_elements(root):
    """XML에서 반복되는 요소 찾기"""
    # 첫 번째 수준의 자식 요소 가져오기
    child_elements = list(root)
    if not child_elements:
        return None, "XML에 자식 요소가 없습니다."

    # 가장 많이 반복되는 태그 이름 찾기
    tag_counts = {}
    for child in child_elements:
        tag = child.tag
        tag_counts[tag] = tag_counts.get(tag, 0) + 1

    # 가장 많이 반복되는 태그 찾기
    most_common_tag = max(tag_counts.items(), key=lambda x: x[1])[0]

    # 반복되는 요소들 찾기
    repeated_elements = [elem for elem in child_elements if elem.tag == most_common_tag]

    if not repeated_elements:
        return None, "XML에서 반복되는 요소를 찾을 수 없습니다."

    return repeated_elements, None

이 모듈의 특별한 점:

  • 자동으로 XML에서 반복되는 요소 패턴 감지
  • 반복 요소의 자식 태그를 헤더로 사용
  • 구조적 데이터를 평면화하여 엑셀 형식으로 변환

작동 방식:

  1. XML 문서 파싱
  2. 가장 많이 반복되는 요소 패턴 식별
  3. 첫 번째 반복 요소의 자식 태그를 헤더로 추출
  4. 각 반복 요소의 내용을 행 데이터로 변환

6. 실 사용 사례

필자는 IT 서비스 회사의 인프라 운영 부서에서 일하고 있습니다. 서버, 네트워크, 스토리지 등 다양한 시스템을 관리하며 수많은 데이터와 씨름하고 있죠. 엑셀 헬퍼는 이런 환경에서 탄생했습니다.

데이터 추출 문의 처리의 효율화

"서버 목록을 엑셀로 주세요", "네트워크 장비 현황을 정리해주세요" - 이런 요청이 하루에도 몇 번씩 옵니다. 과거에는:

  1. API에서 JSON 데이터 추출
  2. 데이터 구조 분석
  3. 엑셀에 복사하여 붙여넣기
  4. 데이터 정리 및 서식 적용

이 과정에 30분에서 1시간까지 소요되었습니다. 엑셀 헬퍼 도입 후에는 API 응답을 복사해 붙여넣고 작업 시간이 5분 이내로 단축되었습니다.


단순한 유틸리티가 일상 업무에 가져온 변화는 생각보다 큽니다. 반복적인 데이터 변환 작업에서 해방되어 더 가치 있는 일에 집중할 수 있게 되었으니까요. 여러분의 업무에도 이런 작은 자동화가 큰 변화를 가져올 수 있기를 바랍니다!

반응형