자동화를 위한 엑셀 객체 구조 파악하기

업데이트:

이전글 : 사내망 엑셀파일에 걸린 자물쇠를 뚫고 코딩하기

엑셀의 객체 구조

xlwings 라이브러리의 작동원리

지난 포스팅에서 xlwings 라이브러리를 소개하면서 ‘액셀파일이 아니라 엑셀프로그램 자체를 직접 제어할 수 있다’고 했었다. 어떻게 그것이 가능한 것일까?

마이크로소프트(MS)에서 만든 COM(Component Object Model)이라는 기술이 있다. 윈도우 운영체제 내에 서로 다른 언어로 개발된 프로그램의 구성요소들을 상호 활용할 수 있도록 해주는 메커니즘이다. 예컨대 C++ 언어로 개발된 엑셀이나 워드 같은 프로그램의 이런저런 고유 기능들을 파이썬으로 가져와 프로그램 개발에 사용하는 방식이다.

파이썬에서 윈도우의 COM 기술을 사용할 수 있도록 해주는 win32com 이라는 라이브러리가 있다. xlwings는 win32com을 기초로 엑셀 기능 활용에 특화시켜 만든 라이브러리다. 파이썬에서 xlwings를 통해 엑셀파일을 열고, 시트를 선택하고, 특정 셀에 값을 입력하도록 요청하면, COM 기술을 매개로 엑셀프로그램에 해당 요청이 전송된다. 또한 특정 시트의 이름이나 셀에 입력된 값 등의 데이터를 파이썬으로 가져올 수도 있다.

엑셀을 자동화하는 요청을 정확히 하려면 엑셀프로그램의 구성요소, 즉 엑셀의 ‘객체(object)’ 구조를 파악해야한다. 그렇다면 객체는 무엇일까?

객체란 무엇인가?

객체에 대해서는 이 블로그의 <파이썬 기초=""> 카테고리에서 추후에 별도의 포스팅을 할 예정이다. 여기서는 xlwings 라이브러리 활용에 필요한 정도만 언급하고자 한다.

객체는 프로그램의 구성요소로서 ‘데이터와 기능’을 갖는 실체를 말한다. object 라는 영단어의 일반적인 의미(‘대상’)에서처럼 우리가 프로그램을 개발하면서 인식할 수 있는 거의 모든 대상은 객체라고 할 수 있다. 문자열, 정수, 리스트, 딕셔너리, 시리즈, 데이터프레임 등 지금껏 파이썬을 공부하며 접했던 모든 것이 ‘객체’다.

객체는 속성(attribute)과 메서드(method)의 집합체이다. 속성이란 객체에 담겨있는 정보 혹은 데이터를 의미하며, ‘객체 변수’라고도 불린다. 메서드는 객체의 속성을 활용해 어떤 새로운 데이터를 산출하는 등의 행위 또는 기능을 정의한 것을 말하며, ‘객체 함수’라고도 불린다.

파이썬 판다스의 데이터프레임(DataFrame) 객체의 예를 들어보자. 인덱스(index), 컬럼명(columns), 자료값(value) 등 데이터프레임 내부에 담긴 정보들은 해당 객체의 ‘속성’이다. 이 속성들을 활용해 인덱스를 새로 설정하거나(set_index), 피벗테이블을 생성하거나(pivot_table), 그래프를 그리는(plot) 기능들은 데이터프레임 객체의 ‘메서드’에 해당한다. 파이썬의 모든 객체들은 이렇게 내부에 각자의 속성과 메서드를 가지고 있다.

그림으로 보는 엑셀 객체의 계층구조

엑셀도 역시 컴퓨터 프로그램으로서 다양한 객체들로 구성돼있다. 우리가 익히 알고 있는 엑셀의 통합문서, 시트, 차트, 셀 같은 것들이 다 객체이다. 특히 엑셀은 객체들이 계층구조로 이뤄져있는데, 대표적인 객체들은 아래의 그림과 같다.

xlwings_object
엑셀 객체의 계층구조

각 객체들의 의미와 객체 내에 정의된 속성/메서드는 다음과 같다.

  • 통합문서(Book) : 엑셀프로그램을 실행시켜서 ‘새 문서’를 만들거나, 미리 저장되어 있는 엑셀파일(.xlsx)을 열었을 때 프로그램 안에 나타나는 작업대상을 말한다. 문서의 이름 또는 파일명은 속성, 문서를 닫거나 파일로 저장하는 기능은 메서드에 해당한다.

  • 시트모음(sheets) : 통합문서마다 1개 이상의 시트가 존재하는데, 열려있는 모든 시트를 모아놓은 것을 sheets라고 한다. 문서 내 시트의 총 개수나 시트이름 목록은 속성, 새로운 시트를 추가하는 기능은 메서드에 해당한다.

  • 시트(Sheet) : 문서 내 각각의 시트를 의미한다. 시트의 이름, 순번, 숨김여부, 사용된 셀 범위 등이 속성에 해당한다. 시트 내 모든 내용을 지우기, 해당 시트의 삭제 등의 기능이 메서드이다.

  • 셀 또는 범위(Range) : 엑셀 시트 내에 데이터를 담고 있는 셀 혹은 여러개의 셀이 모인 특정 범위를 의미한다. 셀 내의 자료값, 셀의 위치, 색상, 서식, 특정 범위 내 셀의 개수 등이 속성에 해당한다. 셀 값의 복사, 붙여넣기, 삭제, 삽입 등의 기능이 메서드이다.

xlwings_excel
엑셀프로그램의 구조

xlwings는 위에서 설명한 엑셀 객체들의 속성과 메서드를 호출할 수 있는 파이썬 객체를 생성할 수 있게 해준다. 다음 포스팅부터는 실제로 파이썬 코딩을 통해 각 엑셀 객체들을 제어하는 방법을 살펴보도록 하겠다.

다음편 : xlwings의 Book, Sheet, Range 객체 다루기

엑셀자동화 카테고리 목록 바로가기

댓글남기기