파이썬 엑셀(Excel) 파일 다루기 > 파이썬 응용

본문 바로가기
사이트 내 전체검색

회원로그인

올서베이넷
무료 온라인 설문 사이트
OVITII
웹 프레젠테이션 도구

파이썬 응용

파이썬 엑셀(Excel) 파일 다루기

페이지정보

글쓴이 관리자 조회 33,186 조회 날짜 20-01-08 22:33 / Update:20-01-09 18:15
댓글 0 댓글

SNS 공유

  • 트위터로 보내기
  • 페이스북으로 보내기
  • 구글플러스로 보내기

내용

파이썬 엑셀(Excel) 파일 다루기

 

파이썬에서 엑셀 파일을 다루기 위해서 openpyxl 모듈을 사용한다. openpyxl을 설치한다.

 

pip install openpyxl

 

관련 모듈 :

openpyxl : https://pypi.org/project/openpyxl/

jdcal : https://pypi.org/project/jdcal/

et_xmlfile : https://pypi.org/project/et_xmlfile/

 

 

 

1. 엑셀의 구조와 개념

 

1) workbook - 엑셀 파일을 의미한다

2) worksheet - workbook 안에 있는 엑셀의 시트를 의미한다. 한개의 workbook에는 여러개의 worksheet가 존재할 수 있다.

3) cell - worksheet안에 있는 한개의 칸을 의미한다. 가로줄은 (A, B, C...) 세로줄은 (1, 2, 3...)으로 구분한다. 따라서 cell 값은 'A1' 과 같이 표현할 수 있다. 또는 row, column 값을 이용하여 cell에 접근할 수 있다.

 

예제파일은 아래와 같이 내용이 입력되어 있다.

파일명 : openpyxltest.xlsx

 

2921056927_1578545320.4009.png

 

 

 

2. 엑셀 파일 열기

 

이미 존재하는 파일을 읽을 때는 load_workbook('파일명') 메서드를 사용한다.

wb = openpyxl.load_workbook('openpyxltest.xlsx')

 

workbook을 읽어들이고 나서는 worksheet를 불러온다.

worksheet를 불러올때는 현재 활성화 된 시트를 불러오는 방법과 시트 이름을 직접 호출해서 불러올 수 있다.

 

현재 활성화된 worksheet를 호출하는 방법

ws = wb.active

 

시트 이름을 통해 호출하는 방법

ws = wb['Sheet']

 

import openpyxl

 

wb = openpyxl.load_workbook('openpyxltest.xlsx')

 

# ws = wb.active

ws = wb['Sheet']

 

 

 

3. cell의 값 읽어오기

 

cell의 값을 읽어오기 위해서는 두 가지의 방법을 사용할 수 있다.

 

1) cell의 index를 이용하는 방법

 

cell1 = ws['C4'].value

 

2) cell() 메서드를 이용하는 방법

cell() 메서드를 사용할 때는 row, column을 파라미터로 사용한다. row, column은 1부터 시작한다.

 

마지막 값이 존재하는 셀(row) : ws.max_row

마지막 값이 존재하는 셀(column) : ws.max_column

 

cell2 = ws.cell(row=2, column=3).value

 

 

import openpyxl

 

wb = openpyxl.load_workbook('openpyxltest.xlsx')

 

# ws = wb.active

ws = wb['Sheet']

 

cell1 = ws['C4'].value

cell2 = ws.cell(row=2, column=3).value

 

print(cell1)

print(cell2)

 

결과


 

 

 

4. 여러 cell 값 읽어오기

 

여러 개의 cell을 동시에 지정할 수 있다. 결과는 tuple로 반환되고, row와 column이 여러개가 겹치면 이중 tuple이 된다.

따라서 for 구문을 통해서 tuple값을 읽어내면 된다.

그리고 셀의 끝은 마지막 값이 들어있는 셀이 된다. 

 

1) rows 기준으로 읽기

ws.rows

 

2) columns 기준으로 읽기

ws.columns

 

3) 범위 지정

cell_range = ws['B1':'D6']

 

4) row 지정

row3 = ws[3]

 

5) row 범위 지정

row_range = ws[1:6]

 

6) column 지정

colC = ws['C']

 

7) column 범위 지정

col_range = ws['C:D']

 

import openpyxl

 

wb = openpyxl.load_workbook('openpyxltest.xlsx')

 

# ws = wb.active

ws = wb['Sheet']

 

# 1) rows 기준으로 읽기
for r in ws.rows:

    # 행 인덱스
    print(r[0].row)
    print(r[0].value, r[1].value, r[2].value, r[3].value)

 

# 2) columns 기준으로 읽기

for c in ws.columns:

    # 열 인덱스
    print(c[0].column)
    print(c[0].value, c[1].value, c[2].value, c[3].value, c[4].value, c[5].value)

 

# 3) 범위 지정
cell_range = ws['B1':'D6']
print(cell_range)
for col_cell in cell_range:
    for cell in col_cell:
        print(cell.value, end=" , ")
    print("")


# 4) row 지정
row3 = ws[3]
print(row3)
for col_cell in row3:
    print(col_cell.value)


# 5) row 범위 지정
row_range = ws[1:6]
print(row_range)
for col_cell in row_range:
    for cell in col_cell:
        print(cell.value, end=" , ")
    print("")

 

# 6) column 지정
colC = ws['C']
print(colC)
for col_cell in colC:
    print(col_cell.value)

 

# 7) column 범위 지정
col_range = ws['C:D']
print(col_range)

for col_cell in col_range:
    for cell in col_cell:
        print(cell.value, end=" , ")
    print("")

 

결과

1
None 1 가 20
2
None 2 나 302
3
None 3 다 50
4
None 4 라 40
5
None 5 마 560
6
None 6 바 10


1
None None None None None None
2
1 2 3 4 5 6
3
가 나 다 라 마 바
4
20 302 50 40 560 10

 

((<Cell 'Sheet'.B1>, <Cell 'Sheet'.C1>, <Cell 'Sheet'.D1>), (<Cell 'Sheet'.B2>, <Cell 'Sheet'.C2>, <Cell 'Sheet'.D2>), (<Cell 'Sheet'.B3>, <Cell 'Sheet'.C3>, <Cell 'Sheet'.D3>), (<Cell 'Sheet'.B4>, <Cell 'Sheet'.C4>, <Cell 'Sheet'.D4>), (<Cell 'Sheet'.B5>, <Cell 'Sheet'.C5>, <Cell 'Sheet'.D5>), (<Cell 'Sheet'.B6>, <Cell 'Sheet'.C6>, <Cell 'Sheet'.D6>))
1 , 가 , 20 , 
2 , 나 , 302 , 
3 , 다 , 50 , 
4 , 라 , 40 , 
5 , 마 , 560 , 
6 , 바 , 10 , 


(<Cell 'Sheet'.A3>, <Cell 'Sheet'.B3>, <Cell 'Sheet'.C3>, <Cell 'Sheet'.D3>)
None
3

50


((<Cell 'Sheet'.A1>, <Cell 'Sheet'.B1>, <Cell 'Sheet'.C1>, <Cell 'Sheet'.D1>), (<Cell 'Sheet'.A2>, <Cell 'Sheet'.B2>, <Cell 'Sheet'.C2>, <Cell 'Sheet'.D2>), (<Cell 'Sheet'.A3>, <Cell 'Sheet'.B3>, <Cell 'Sheet'.C3>, <Cell 'Sheet'.D3>), (<Cell 'Sheet'.A4>, <Cell 'Sheet'.B4>, <Cell 'Sheet'.C4>, <Cell 'Sheet'.D4>), (<Cell 'Sheet'.A5>, <Cell 'Sheet'.B5>, <Cell 'Sheet'.C5>, <Cell 'Sheet'.D5>), (<Cell 'Sheet'.A6>, <Cell 'Sheet'.B6>, <Cell 'Sheet'.C6>, <Cell 'Sheet'.D6>))
None , 1 , 가 , 20 , 
None , 2 , 나 , 302 , 
None , 3 , 다 , 50 , 
None , 4 , 라 , 40 , 
None , 5 , 마 , 560 , 
None , 6 , 바 , 10 , 


(<Cell 'Sheet'.C1>, <Cell 'Sheet'.C2>, <Cell 'Sheet'.C3>, <Cell 'Sheet'.C4>, <Cell 'Sheet'.C5>, <Cell 'Sheet'.C6>)






((<Cell 'Sheet'.C1>, <Cell 'Sheet'.C2>, <Cell 'Sheet'.C3>, <Cell 'Sheet'.C4>, <Cell 'Sheet'.C5>, <Cell 'Sheet'.C6>), (<Cell 'Sheet'.D1>, <Cell 'Sheet'.D2>, <Cell 'Sheet'.D3>, <Cell 'Sheet'.D4>, <Cell 'Sheet'.D5>, <Cell 'Sheet'.D6>))
가 , 나 , 다 , 라 , 마 , 바 , 
20 , 302 , 50 , 40 , 560 , 10 , 

 

 

 

6. workbook 저장 및 종료

 

workbook은 save() 메서드를 이용하여 저장한다.

 

wb.save('openpyxltest.xlsx')

 

종료하기

 

wb.close()

 

import openpyxl

 

wb = openpyxl.load_workbook('openpyxltest.xlsx')

 

wb.save('openpyxltest.xlsx')

wb.close()

 

 

 

5. cell에 값 입력하기

 

1) index로 셀 지정해서 값 입력하기

 

ws['A1'] = 'test1'

 

 

2) cell() 메서드로 값 입력하기

 

ws.cell(row=2, column=1).value = "test2"

 

import openpyxl

 

wb = openpyxl.load_workbook('openpyxltest.xlsx')

 

# ws = wb.active

ws = wb['Sheet']

 

ws['A1'] = "test1"
ws.cell(row=2, column=1).value = "test2"

 

wb.save('openpyxltest.xlsx')

wb.close()

 

결과

2921056927_1578549133.0007.png

 

 

3) append() 메서드로 입력하기

 

append 메서드를 사용하여 셀에 데이터를 입력할 수 있다. append에 들어가는 파라미터는 리스트이다.

append를 사용하면 데이터가 있는 셀의 아래행의 첫번째 셀부터 차례대로 데이터가 입력이 된다.

 

ws.append(["a", "b", "c"])
ws.
append(["1", "2", "3"])

 

import openpyxl

 

wb = openpyxl.load_workbook('openpyxltest.xlsx')

 

# ws = wb.active

ws = wb['Sheet']

 

ws['A1'] = "test1"
ws.cell(row=2, column=1).value = "test2"

 

ws.append(["a", "b", "c"])
ws.append(["1", "2", "3"])

 

wb.save('openpyxltest.xlsx')

wb.close()

 

결과

2921056927_1578551752.3824.png

 

 

 

 

7. 새로운 workbook 생성

 

1) workbook 생성

Workbook() 메서드를 사용하여 새로운 workbook을 생성한다.

 

wb = openpyxl.Workbook()

 

workbook을 생성하면 기본적으로 "Sheet"가 생성된다.

 

 

2) sheet 생성

 

#마지막에 추가

ws2= wb.create_sheet('Sheet2')

 

# 특정 위치에 추가, 두번째 파라미터 index는 0부터 시작한다.

ws3= wb.create_sheet('Sheet3', 1)

 

 

3) sheet 이름 변경

 

ws4 = wb.create_sheet('Sheet4')
ws4.
title = 'SheetName'

 

import openpyxl

 

wb = openpyxl.Workbook()

 

ws2= wb.create_sheet('Sheet2')

ws3= wb.create_sheet('Sheet3', 1)

 

ws4 = wb.create_sheet('Sheet4')
ws4.title = 'SheetName'

 

wb.save('openpyxltest2.xlsx')

wb.close()

 

결과

2921056927_1578549799.046.png

 

 

 

 

8. 예제 연습

 

"새로운 엑셀 파일을 만들어서 첫번째 시트 이름을 "TestSheet"로 변경하고, "A2" = "Test",  "C1" = "Test2" 라는 값을 입력하고, "ExcelTest.xlsx"라는 파일로 저장하시오."

 

import openpyxl

 

# 엑셀 파일 생성

wb = openpyxl.Workbook()

 

# 현재 시트 지정

ws = wb.active

 

# 시트 이름 변경

ws.title = "TestSheet"

 

# 시트의 각 셀에 데이터 입력

ws['A2'] = "Test"

ws['C1'] = "Test2"

 

# 저장

wb.save('ExcelTest.xlsx')

wb.close()

 

결과

2921056927_1578550282.3528.png

첨부파일

댓글목록 sfs

총 6 건 , 1 페이지
게시물 검색
GNUBOARD_M
Copyright © JBMPA.com All rights reserved.