본문 바로가기
IT

Openpyxl 첫 파이썬 레고블럭

by 소혜민 2025. 1. 30.
반응형

 

파이썬에서 사용을 할 수 있는 레고블럭들을 찾아보기 위해서는 pypi.org에 접속해서 검색을 할 수 있습니다. 하지만 구글이나 네이버에서 검색을 해도 엄청나게 많은 정보들을 얻을 수 있습니다. “파이썬으로 엑셀 다루기”와 같은 검색어로 입력을 하면 정말로 많은 정보를 찾을 수 있습니다. 눈치 채셨겠지만 openpyxl은 엑셀 파일을 파이썬으로 다루기 위한 패키지, 엑셀 레고블럭입니다. 

 

 

pypi.org에는 이와 같은 레고 블럭이 얼마나 존재할까요? 무려 461,646개의 레고 블럭이 이 글을 쓰고 있는 현재 시점에 있다고 합니다. 이런 레고블럭은 한번에 발표되는 것이 아니라 처음에 발표하고 필요하면 수정을 해서 다시 공유를 하게 됩니다. 업그레이드, 기능을 추가하거나 오류를 수정해서 새롭게 발표하는 소프트웨어들을 버전업 된 소프트웨어라고 하는데 이렇게 안정화가 되기도하고 기능이 올라가기도 합니다. 이런 것을 리비전 한다고 하는데 이것을 포함하면 현재 457만번의 레고 블럭이 발표 되었습니다. 하나의 레고 블럭을 만들때는 하나의 파이썬 파일이 아니라 여러 개의 파일이 사용될 수도 있는데 이런 파일들을 개수를 모두 합하면 844만개의 파일이 등록이 되어 있다고 합니다. 그리고 마지막으로 pypi.org에 가입한 사용자의 수가 71만명이 넘습니다. 참고로 저는 가입하지 않았습니다. 정보만 찾아보는데는 가입을 할 필요가 없기 때문입니다. 

 

 

그 숫자가 엄청납니다. 그렇다면 엑셀을 다룰 수 있도록 도와주는 excel과 관련된 레고블럭, 파이썬 패키지의 개수는 얼마나 될까요? 앞에 보이는 검색창에 “Excel”을 입력해 봤습니다. 무려 4969개나 있다고 검색 결과가 나옵니다. 여기에는 유용하게 사용할 수 있는 패키지들도 있겠고 엑셀의 특정 기능을 위해서 만들어진 특수 목적 패키지도 있을 것입니다. 완성도가 높은 것도 있고 물론 완성도가 낮은 패키지도 있겠습니다. pypi에서 직접 패키지를 찾는 것은 어려울 수도 있겠습니다. 검색만 될 뿐 어떤 것이 가장 많이 사용되고 인기가 좋은지와 같은 세세한 정보는 찾을 수 없습니다. 그래서 우리는 검색합니다. 구글이나 네이버에서 말이죠. 많이 사용하는 레고 블럭은 검색하면 당연히 눈에 띌 수 밖에 없고, 예제도 많이 찾을 수 있습니다. 

 

자! 이제 openpyxl을 사용해 봅시다.

하나의 패키지, 레고 블럭을 사용하기 위해서는 내 프로젝트 안으로 레고 블럭을 가지고 와야 합니다. 앞서 살펴본 바와 같이 46만개가 넘는 레고 블럭을 모두 가지고 다닐 수는 없겠죠? 그러니 필요한 레고 블럭들을 내 프로젝트로 가지고 와야 합니다. 먼저 pypi의 검색창에 “openpyxl”을 입력해서 찾아들어가 보면 다음과 같은 정보를 볼 수 있습니다.

 

 

openpyxl 다음에 있는 숫자는 해당 패키지의 버전입니다. 맨 앞자리 숫자는 큰 변화가 있을때 일반적으로 숫자를 높이고, 두 번째 작은 변화 마지막 세 번째 변화는 아주 작은 변화가 있을 때 버전을 변경한다는 일반적인 규칙이 있습니다. 그리고 우측 하단에보면 최근 발표된 날짜가 있습니다. 그리고 oepnpyxl3.1.2 아래에는 “pip install openpyxl”이라고 되어 있는 것이 내 프로젝트 안으로 패키지, 레고 블럭을 복사해 오는 명령입니다. “pip install openpyxl” 오른쪽의 아이콘을 클릭해서 명령을 복사합니다. 

 



파이참으로 돌아와 아래의 터미널 윈도우를 봅니다. 터미널 윈도우 아래에 여러 개의 탭이 보이는데 그 중에서 Terminal을 선택하면 

 

(venv) PS C:\PythonProject\MyRPA> 

 

와 같이 나타납니다. Ctrl + V나 마우스 오른쪽 버튼을 클릭해서 “pip install openpyxl”을 붙여 넣기 하거나 직접 타이핑을 합니다. 설치는 그리 오래 걸리지 않습니다. 일반적인 프로그램을 설치할 때 처럼 새로운 창이 뜨고 프로그래스바가 어느 정도 설치가 되고 있는지를 알려주는 그래픽적인 정보 없이 모두 터미널에 출력이 됩니다. 앞 그림에서 보면 성공적으로 openpyxl-3.1.2가 설치되었다는 메시지를 볼 수 있습니다. 그러면 우리 프로젝트에 어떤 레고 블럭들이 설치가 되어 있는지 살펴보겠습니다. 

파이참 메뉴에서 File → Settings를 선택합니다. 나타난 Settings 창의 좌측에서 Project : MyRPA → Python Interpreter를 선택하면 설치된 패키지들을 볼 수 있습니다. 앞서 실행을 했었던 pip를 비롯해서 총 3개의 기본 패키지들을 볼 수 있습니다. 

 

 

여기서 openpyxl 패키지를 추가하기 위해서는 package 위의 +를 누르면 나타난 창에 openpyxl을 입력해서 설치를 할 수 있습니다. 검색해서 나타난 패키지를 선택을 하고 하단에 “Install Package” 버튼을 클릭해 설치를 하면 됩니다. pip 명령을 사용하던 Python Interpreter를 사용하건 편한 방법을 사용하면 됩니다. 

 

이제 openpyxl 패키지를 사용해서 코딩을 할 준비가 되었습니다. 이번 프로그램에서는 엑셀의 기본 시트의 A1에 hello openpyxl을 입력하고, B1, B2에 각각 10과 20을 마지막으로 B3에 “=B1+B2”와 같이 수식을 넣겠습니다. 그리고 새로운 시트를 만들어 시트 이름을 “Hello”로 생성을 하고 B5에 “My first openpyxl program”을 출력합니다. 마지막으로 hello.xlsx라는 이름으로 파일을 생성합니다. 

 

이런 내용을 담은 코드를 바로 다음에서 볼 수 있습니다. 짧은 코드지만 잘 이해를 하고 넘어가야겠습니다. 

 

002_openpyxl.py 

 

 

 import openpyxl # 패키지 import

 

첫번째 줄은 우리가 프로젝트에 pip install을 이용해서 담아 놓은 openpyxl을 002.openpyxl.py 내에서 가져다가 사용하겠다고 선언을 하는 것입니다. pip install openpyxl을 이용해서 프로젝트 내로 가지고 왔다고 프로젝트 내에서 바로 사용할 수 있는 것은 아닙니다. 왜냐하면 프로젝트는 많은 수의 파이썬 파일로 구성되는 경우가 대부분이기 때문입니다. 이미 배운 바와 같이 # 뒤쪽은 주석으로 파이썬이 무시하는 부분입니다. 

 

 wb = openpyxl.Workbook() # 엑셀은 워크북(엑셀파일), 그리고 워크시트로 구분이 됩니다.

 

세번째 줄은 설명해야 할 사항이 참 많습니다. 우선 wb에 대해서 설명을 드려야겠습니다. 

변수라는 친구입니다. 통상적으로 이것저것 내용을 담을 수 있는 만능 그릇이라고 얘기할 수 있습니다. 등호 오른쪽에 있는 것이 무엇이든 그 내용을 담게 됩니다. 그럼 등호 오른쪽을 보겠습니다. 등호의 오른쪽에 있는 openpyxl은 패키지죠. openpyxl 패키지 안에 들어 있는 Workbook이라는 것이 '.'을 이용해서 연결이 되어 있습니다. openpyxl안에 있는 무엇인가를 사용할 때, '.'을 이용해서 연결을 하는데 '.' 뒤에는 다양한 것들이 붙을 수 있습니다. 어떤 기능을 수행하기 위해서는 기능블록을 호출하는데 이 기능 블록을 호출할 때는 뒤에 괄호가 붙습니다. 그리고 일반적인 변수, 무엇을 담을 수 있는 만능 그릇을 연결할 때는 괄호가 없습니다. 그러니 이 문장은 openpyxl이라는 패키지에 Workbook()이라는 기능을 불러서  만능 그릇 wb에 넣으라는 그런 의미입니다. 

 

Workbook과 Worksheet는 엑셀에서 사용하는 용어죠. 쉽게 얘기하자면 Workbook은 엑셀파일을 얘기하고 Worksheet는 엑셀의 각각의 시트를 의미합니다.  그러니 wb는 바로 엑셀 파일입니다. 

 

 ws = wb.active # Default Sheet를 활성화 합니다.

 

예상하셨는지 모르겠습니다만 ws는 Worksheet 입니다. 이해가 쉽도록 변수 이름을 지정한 것입니다. 큰 프로젝트를 여럿이 개발할 때는 일정한 규칙을 줍니다. 왜냐하면 하나의 소스코드를 여러 사람이 함께 개발을 하기 때문에 이름만 보고서도 어떠한 이유로 사용하는 변수인지 어떤 목적인지를 알기 쉽게 표현을 합니다. 우리가 엑셀 파일을 처음 열면 Sheet1이라는 시트 하나만 있는 것을 볼 수 있습니다. 기억하시죠? 기억이 안난다면 엑셀을 실행시켜봐 주세요. 엑셀을 실행하고 새 파일을 만듭니다.엑셀의 좌측 하단을 보시면 Sheet1이라고 써있는 것이 보이시나요? 바로 이게 Worksheet이고 필요하면 Worksheet는 계속해서 추가할 수 있습니다. 이름도 줄 수 이고 Worksheet의 색깔도 바꿀 수 있습니다. 자! 그러면 엑셀을 실행하면 바로 Worksheet에 무엇이든 입력을 받을 준비를 하고 있는데요. 프로그래밍으로 만들때는 wb, WorkBook은 openpyxl.Workbook()으로 만들어서 wb는 엑셀 파일이라는 것을 알았는데 어떻게 Worksheet에 접근을 할 수 있을까요? Worksheet라는 것이 있어야 '.'을 이용해서 다른 기능들을 사용할텐데 말이죠. 그래서 실제 엑셀을 사용하는 것과 다르게 현재 Workbook에서  활성화(active)되어 있는 것을 ws, Worksheet로 명시적으로 받아 오는 것입니다. 이렇게 ws로 받아와야 ws.내가_하고_싶은일()과 같이 기능을 호출할 수 있겠죠. 이젠 엑셀파일 자체인 Workbook, wb과 Worksheet, ws가 생성이 되었으니 뭔가 직접 엑셀 파일을 다룰 수 있게 되었습니다.

 

다음의 네 줄을 보시죠.  

 ws['A1'] = 'hello openpyxl'

 ws['B1'] = 10

 ws['B2'] = 20

 ws['B3'] = '=B1+B2'

 

눈치 채신 분들도 계실텐데요. 엑셀 파일  Worksheet의 A열 1행에 ‘hello openpyxl’을 출력하고, B열 1행에 10, B열 2행에 20, B열 3행에 "=B1+B2”와 같은 계산식을 넣으라는 의미입니다. 원하는 행과 열에 숫자는 따옴표 없이 함수는 따옴표를 이용해서 넣으면 됩니다. 쉽죠? 우리가 아는 엑셀 사용법과 크게 다르지 않습니다. 직관적이고 이해하기가 쉬운 것 같습니다. 하지만 이렇게 접근하는 것은 우리가 이해하기는 쉬워도 프로그래밍으로 할 때는 많이 안쓰는 방법이라고 하는데요. 자동으로 100개, 1000개, 10000개의 데이터를 넣는다고 하면 행은 숫자로 표현을 하니 컴퓨터도 이해하기가 쉬운데 열을 표현하기 위해서는 알파벳의 조합이 많이 필요하겠죠? 그래서 다른 방법이 필요하기도 합니다. 

 

우선 새로운 Worksheet를 만드는 방법을 보고 새로운 ws에서 보여드리도록 하겠습니다.

 

 ws2 = wb.create_sheet('Hello') # 새로운 시트를 만든다.

 ws2.cell(5, 2, "My first openpyxl program")

 

워크시트 wb와 create_sheet() 함수를 이용해서 엑셀 파일에 새로운 시트를 만들고 이름을 ws2로 줍니다. 다음은 새로 만든 ws2에 cell()이라는 함수를 사용합니다. 첫번째가 행, 두번째가 열, 그리고 마지막 세번째는 셀에 넣을 값입니다. 컴퓨터가 참 똑똑하기도 하지만 하나하나 꼼꼼하게 다뤄줘야 합니다. 두 번째 줄은 5번째 행, 두 번째 열에 “My first openpyxl program”을 넣으라는 의미입니다. 앞에서 살펴본대로라면 ws2[“B5] = “My first openpyxl program”과 같다는 것입니다. 다만, 순서대로 여러 열에 무엇인가를 넣으려면 A, B, C, …..AA, AB, …..AAA, AAB와 같이 진행이 된다는 것입니다. 컴퓨터는 이런 방식으로 처리를 하려면 많은 노력이 들어갑니다. 그래서 대신 숫자를 쓴 것입니다. cell() 이라는 함수는 그래서 유용하게 사용할 수 있겠습니다.

 

 filename = 'hello.xlsx'

 wb.save(filename)

 

filename에 파일 이름을 주고, 워크북 wb에 save라는 함수를 이용해서 파일을 저장합니다. 두 줄을 하나로 줄여서 wb.save(‘hello.xlsx’)와 같이 대체를 해도 무방합니다. 

 

마지막 줄은 “프로그램이 종료되었습니다”라고 터미널에 단순히 출력하는 문장입니다. 자! 실행을 시켜볼까요? 실행을 하면 왼쪽의 프로젝트 창에 hello.xlsx라는 파일이 생성이 되었을 겁니다. 더블클릭을 해서 파일을 열어보죠. 

 

다음에 보이는 대로 엑셀 파일은 두 개의 시트로 되어 있습니다. 첫번째 시트는 엑셀의 기본 시트 이름인 sheet1으로 되어 있고, 새롭게 만든 hello라는 시트가 있습니다. 그리고 sheet1에는 10, 20 그리고 “=B1+B2”가 B3에 들어 있습니다. 계산식이 잘 동작해서 숫자 30이 잘 들어가 있습니다. hello 시트는 어떤가요? 우리가 만든대로 정보가 잘 들어가 있죠? 

 



두 번째 프로그램에서 우린 엑셀 파일을 만들어봤습니다. openpyxl이라는 패키지의 도움이 컸습니다.  앞으로 유용한 패키지를 찾아서 사용해보도록 하죠.



⤱ pip 업그레이드 하기

앞서 pip를 이용해서 openpyxl을 설치한 화면을 보면 [Notice]가 보입니다. 권고 사항인데요. pip가 새로운 버전이 나왔으니 업그레이드를 하는 것이 어떻겠느냐는 겁니다. 업그레이드 방법도 같이 써 있죠? 그것을 그대로 복사해서 넣으면 됩니다. pip는 패키지를 설치해 주는 아주 유용한 툴입니다. 항상 최신 버전으로 업데이트 해서 사용하시길 추천합니다.

 

python.exe -m pip install –upgrade pip



(venv) PS C:\PythonProject\MyRPA> python -m pip install --upgrade pip
Requirement already satisfied: pip in c:\pythonproject\myrpa\venv\lib\site-packages (22.3.1)
Collecting pip
  Using cached pip-23.1.2-py3-none-any.whl (2.1 MB)
Installing collected packages: pip
  Attempting uninstall: pip
    Found existing installation: pip 22.3.1
    Uninstalling pip-22.3.1:
      Successfully uninstalled pip-22.3.1
Successfully installed pip-23.1.2
(venv) PS C:\PythonProject\MyRPA> 

 

반응형

댓글