Daily Life of BlueRose

컴퓨터 & 코딩 공부/파이썬

파이썬 Library/API - pyWin32(엑셀/한글 조작용 API) 기초 원리 정리

푸른로즈 2024. 4. 19. 18:08
728x90

개요

pyWin32?

윈도우의 각종 환경을 조작할 수 있는 라이브러리 세트로, win32com(COM개체)을 포함하여 win32API, win32con(상수), win32gui(인터페이스)등이 존재한다.

 

PyWin32 Documentation

 

timgolden.me.uk

win32Com 라이브러리란?

  • COM(Component Object Model)이라 일컫는 소프트웨어간 공유 언어 체계를 통해, 파이썬을 이용하여 다른 프로그램을 조작할 수 있도록 하는 라이브러리
  • 이론상으로는 윈도우에서 제공되는 모든 프로그램을 조작할 수 있으나, 보안목적으로 자동화를 차단하는 몇몇 프로그램이 존재하므로 각 소프트웨어별로 제공하는 보안 모듈 등을 설치해야 할 수 있다(특히 한글).
  • API리스트 : http://timgolden.me.uk/pywin32-docs/com.html
 

Python COM

 

timgolden.me.uk

 

Win32COM의 작동원리를 알기 위해서는 COM(Component Object Model)의 개념을 이해해야 한다.

COM의 개념

  • COM 서비스의 개념 : 소프트웨어 컴포넌트들이 서로 기능을 공유하고 통합되도록 지원하기 이하여, OS 차원에서 제공하는 기능들을 통틀어 일컫는 말.
    예를 들어, 한글을 통해 PDF를 출력하는 경우 서로 간 소통을 위하여 표준화된 수단을 사용하게 될텐데, 이 기능이 바로 COM이라 볼 수 있다.
  • COM의 특징
    • COM은 인터페이스 표준 : 소프트웨어 컴포넌트가 다른 컴포넌트와 연결되는 인터페이스는 COM의 표준을 따라야 하나, 소프트웨어 컴포넌트의 내부는 자유롭게 구성할 수 있다는 의미
    • 언어 중립적인 표준 : 일반적으로 윈도우 환경에서 실행되는 모든 실행 모듈에 적용될 수 있는 것이며, 이 실행 모듈을 만드는 언어는 C/C++ 뿐 아니라, 자바, 파이썬 등 어떤것이든 될 수 있다.
    • 객체 지향적 : 컴포넌트들을 객체 단위로 구성할 수 있고, 다형성, 상속성 등 특성을 지원함
    • 바이너리 표준 : COM은 특정 프로그래밍 언어에 국한된 것이 아닌 모든 실행 모듈에 적용되는 표준이다. COM이 소스코드 레벨에서 정의된 표준이 아니라 DLL, EXE 파일 등과 같은 바이너리(기계어) 레벨에서의 표준임을 의미한다.
      따라서 소스코드가 공개되어 있지 않은 소프트웨어 컴포넌트도 COM을 이용하여 통합할 수 있으며, 서로 다른 언어로 개발돈 소프트웨어 컴포넌트들도 통합이 가능하다.

용어정리

  1. EXE : 소스코드 컴파일을 통해 ‘기계어로 완성된’, ‘실행시 즉각 기계어로 동작하는’ 프로그램이다. 비슷한 실행파일로 .COM파일이 있다. COM파일은 64KB이하의 메모리로 동작가능한 프로그램의 실행파일이다(도스시절에 사용되던
    파일). 시대가 지나면서 메모리의 한계를 벗어나 사용할 수 있는 EXE가 대중화되었다.
  2. DLL : Direct link library를 이미하는 확장자로, 프로그램을 운용하던 중 특정 라이브러리를 사용하게 되는 경우 해당 라이브러리만을 불러올 수 있도록 고안된 파일이다. 메모리에 동일한 내용의 파일이 여러개 올라가서 메모리 점유율을 낭비하는 일이 적도록 만들어주며, 램에 기재된 동일한 내용의 확장파일이 있다면 추가 점유할 필요없이 Link를 걸어서 사용한다.

 

 

COM의 구성요소

  • COM interface : COM기능을 지원하는 소프트웨어 컴포넌트는 Interface를 이용하여 서로의 기능을 구동한다. 여기서의 Interface는 C/C++ 등 프로그램 코딩에서 사용하던 가상함수 구조체인 Interface를 말한다.(Interface는 클래스가 갖출 최소 조건을 정의한다. 함수의 개수 등…)
    모든 COM개체는 IUnknown Interface를 상속받으며, 메소드로 Addref, Release, QueryInterface를 갖는다.
  • CoClass : COM Interface와 그 Interface를 실제 구현하는 코드를 말함. (DLL/EXE 파일 등)
    (여기서의 Class는 C/C++의 Class와는 다른 의미임)
  • COM Object : CoClass가 메모리에 인스턴스로 생성된 것 (프로세스 상의 ‘Excel.Exe’ 등)
  • COM Server : 하나 이상의 CoClass가 모여 만들어진 ‘프로그램’을 의미 (한글 / Excel 등)
  • COM Client : COM서버가 인터페이스를 통해 제공하는 메소드를 호출함으로써 COM서버의 기능을 이용하는 소프트웨어를 의미한다. (Win32Com을 사용하는 Python 등)

 

728x90

 

COM을 이용한 파일 불러오기 예시

예시1 - 엑셀 조작

import win32com.client

#COM개체로 선언
ExcelApp = win32com.client.Dispatch("Excel.Application")
ExcelApp.Visible = True

#작업
ExcelWorkbook = ExcelApp.Workbooks.Add()
ExcelWrkSht = ExcelWorkbook.Worksheets.Add()
ExcRng1 = ExcelWrkSht.Range("A1:A10")
ExcRng1.Value = 1
Cell1 = ExcelWrkSht.Cells(1,4)
Cell2 = ExcelWrkSht.Cells(7,4)
ExcRng2 = ExcelWrkSht.Range(Cell1, Cell2)
ExcRng2.Value = 100

 

예시2 - 한글 조작

import win32com.client

#한글 프로그램을 COM개체로 선언
HwpAPP = win32com.client.Dispatch("HWPFrame.HwpObject")		
#보안모듈 적용(보안관련 팝업발생 방지)
hwpAPP.RegisterModule('FilePathCheckDLL', 'FilePathCheckerModule')

#작업
HwpAPP.Run("SelectAll")
HwpAPP.Run("CharShapeBold")
HwpAPP.Run("Cancel")
HwpAPP.SaveAs('C:\\Char_bold.hwp')
HwpAPP.Quit()

 

 

 

반응형