헤르메스 LIFE

[Python] openpyxl을 이용한 Excel 파일 다루기 본문

Python

[Python] openpyxl을 이용한 Excel 파일 다루기

헤르메스의날개 2021. 2. 15. 23:31
728x90

Python에서 Excel 을 다루는데는 많은 라이브러리들이 있지만, openpyxl이 일반적으로 많이 사용된다고 합니다.


1. openpyxl 의 설치

(venv) C:\JetBrains\pythonProject\venv\Scripts>pip install openpyxl
Collecting openpyxl
Downloading openpyxl-3.0.6-py2.py3-none-any.whl (242 kB)
|████████████████████████████████| 242 kB 1.1 MB/s
Collecting jdcal
Downloading jdcal-1.4.1-py2.py3-none-any.whl (9.5 kB)
Collecting et-xmlfile
Downloading et_xmlfile-1.0.1.tar.gz (8.4 kB)
Using legacy 'setup.py install' for et-xmlfile, since package 'wheel' is not installed.
Installing collected packages: jdcal, et-xmlfile, openpyxl
Running setup.py install for et-xmlfile ... done
Successfully installed et-xmlfile-1.0.1 jdcal-1.4.1 openpyxl-3.0.6
WARNING: You are using pip version 21.0; however, version 21.0.1 is available.
You should consider upgrading via the 'c:\jetbrains\pythonproject\venv\scripts\python.exe -m pip install --upgrade pip' command.

import openpyxl

def main() :
    # openpyxl 의 load_workbook 메소드를 사용해서 excel 파일을 불러옵니다.
    wb = openpyxl.load_workbook('sample.xlsx')
    # load_workbook 으로 불러온 excel 파일에서 sheet 이름을 가지고 각각의 sheet 를 조작할 수 있습니다.
    ws = wb['Sheet1']

    # 불러온 sheet 에서 excel 의 각 행들을 rows 메소드를 사용해서 순차적으로 접근할 수 있습니다.
    for r in ws.rows:
        row_index = r[0].row
        if row_index == 1:
            ws.cell(row=row_index, column=5).value = 'Sum'      # row, column 은 1 부터 시작함.
            ws.cell(row=row_index, column=6).value = 'Avg'           
            continue
            
        math    = r[1].value
        eng     = r[2].value
        history = r[3].value
        summary = math + eng + history

        ws.cell(row=row_index, column=5).value = summary
        ws.cell(row=row_index, column=6).value = summary / 3
        # cell 의 숫자 속성을 '#.#' 으로 변경합니다.
        ws.cell(row=row_index, column=6).number_format = '#.#'

    # 변경한 workbook(excel) 이 내용을 저장합니다.
    wb.save('sample2.xlsx')
    wb.close()

if __name__ == "__main__" :
    main()

sample.xlsx
0.01MB

728x90