파이썬 엑셀(Excel) 파일 다루기
페이지정보
내용
파이썬 엑셀(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
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 기준으로 읽기 # 행 인덱스
# 2) columns 기준으로 읽기 for c in ws.columns: # 열 인덱스
# 3) 범위 지정
# 6) column 지정
# 7) column 범위 지정 for col_cell in col_range: |
결과
1
((<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>))
|
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"
wb.save('openpyxltest.xlsx') wb.close() |
결과
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.append(["a", "b", "c"])
wb.save('openpyxltest.xlsx') wb.close() |
결과
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')
wb.save('openpyxltest2.xlsx') wb.close() |
결과
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() |
결과
첨부파일
- openpyxltest.xlsx (9.1K) 36 다운로드 | DATE : 2020-01-09 18:15:48