전에는 엑셀을 읽고 쓰기 위해서
자바 POI 라이브러리를 이용해서 했었는데요
이게 POI 관려 jar파일을 임포트 해도 막 에러나고 안되가지고 되게 화났었는데
보니까 파이썬에서 더 간단하게 할 수 있더라구요
바로 openpyxl 라이브러리를 이용하면 엑셀을 읽고 쓸 수 있습니다
그러면 설치부터 해야겠죠???
pip install openpyxl
pip를 통해서 openpyxl을 간단하게 설치할 수 있습니다
파이썬으로 엑셀 파일 쓰기
1
2
3
4
5
6
7
8
9
10
11
12
13
|
from openpyxl import Workbook
import os
save_file_name = 'excel_write.xlsx'
# 엑셀에 데이터 쓰기
save_wb = Workbook()
save_ws = save_wb.active
save_ws['A1'] = '1234'
save_ws.append([1,2,3,4])
save_ws.cell(9, 9, '9/9') # (행, 열, 데이터)
save_wb.save(os.path.join(os.getcwd(), save_file_name))
|
cs |
위와 같은 방식으로 엑셀 파일을 쓸 수 있습니다
1. Workbook 생성하기
2. workbook의 worksheet 활성화 하기
3. worksheet의 특정 cell에 값 쓰기
4. workbook 저장하기
크게 위의 4가지 과정을 거치면 됩니다.
workbook은 excel 파일 자체라고 생각하면 편하실 겁니다.
위의 코드를 실행하면 위와 같은 엑셀파일이 하나 생기게 됩니다
행열 번호로 값 쓰기
save_ws['A1'] = '1234' # 행열 번호로 값 쓰기
위와 같이 행열번호를 이용하여 값을 쓸 수 있습니다
그러면 A1 셀에 값을 쓰게 됩니다
위 처럼 A1셀에 값 1234가 잘 쓰여진것을 볼 수 있습니다
행 전체에 값 쓰기
save_ws.append([1,2,3,4])
행 하나에 값을 쓰기 위해서는 리스트를 이용하면 됩니다.
위 에서 볼 수 있듯이 2번째 행에 값이 써진것을 볼 수 있습니다
cell에 값을 한번 쓰면 그 다음 행에 써지게 됩니다.
save_ws.append([1,2,3,4])
save_ws.append([5,6,7,8])
위와 같이 작성하게 되면
1행에 1,2,3,4가 차례로 써지고
2행에 5,6,7,8이 차례로 써지게 됩니다.
특정 행,열에 값 쓰기
save_ws.cell(9, 9, '9/9') # (행, 열, 데이터)
특정 행, 열에 값을 쓰기 위해서는 cell 메소드를 이용합니다
인자로 3개를 넘겨야 하는데 (행, 열, 데이터) 순으로 값을 넘겨주면 됩니다
행, 열의 인덱스는 0이 아닌 1부터 시작하게 됩니다
파이썬으로 엑셀 읽기
다량의 데이터 한번에 불러오기
1
2
3
4
5
6
7
8
9
10
11
12
|
from openpyxl import load_workbook
import os
load_file_name = 'excel_write.xlsx'
load_wb = load_workbook(os.path.join(os.getcwd(), load_file_name)) # 엑셀파일 load
load_ws = load_wb['Sheet1'] # 존재하는 worksheet load
get_cells = load_ws['A1:J4'] # cell 가져오기
for i, rows in enumerate(get_cells):
for j, cell in enumerate(rows):
print(i, j, cell.value)
|
cs |
1. 엑셀파일을 불러오기 위해서는 load_workbook을 이용한다.
2. 시트명으로 worksheet를 불러옵니다
3. 범위를 지정해서 여러 데이터를 가져옵니다
4. 이는 이차원 리스트 형태로 있으므로 이중 for문을 이용하여 cell 데이터를 가져옵니다
엑셀 데이터는 위와 같이 있습니다
이는 Sheet라는 이름의 시트에 있습니다.
이를 가져와서 출력하게 되면 위와 같이 나오게 됩니다
행열 번호로 값 읽어오기
print(load_ws['A3'].value)
값을 쓸떄와 같이 행열 번호로 값을 읽어올 수 있습니다
위 엑셀 파일에서 읽어온다면 9가 출력 되겠죠??
특정 행, 열의 셀 값 읽어오기
print(load_ws.cell(1,1).value)
위와 같이 특정 좌표로 값을 가져올 수 있습니다
행 단위로 값 읽어오기
rows = load_ws.rows
for num, row in enumerate(rows):
print('#### ', num, end=' ')
for cell in row:
print(cell.value, end=' ')
print()
위와 같이 행 별로 값을 읽어올 수 있습니다
위와 같이 값이 잘 출력되는 것을 볼 수 있습니다
열 단위로 값 읽어오기
columns = load_ws.columns
for num, col in enumerate(columns):
print('#### ', num, end=' ')
for cell in col:
print(cell.value, end=' ')
print()
열 단위로 읽어오는 방법도 행 단위로 읽어오는 것과 같습니다
출력하게 되면 위와 같이 10개의 열에 대해서 모두 잘 나온것을 볼 수 있습니다
위의 함수들을 잘 활용하면 엑셀의 값을 읽어오고 쓸 수 있습니다
엑셀의 값을 load_workbook으로 읽어서
load_wb.save()로 다시 값을 쓸 수도 있습니다