python openpyxl - 파일을 열어서 데이터 입력, 가져오기
본문 바로가기
파이썬(Python)/파이썬으로 엑셀 제어하기

python openpyxl - 파일을 열어서 데이터 입력, 가져오기

by Squat Lee 2021. 3. 23.

 

이번 포스트는 만들어진 엑셀 파일의 데이터를 가져오고, 입력하는 방법에 대하여 알아 보도록 하겠습니다.

 

from openpyxl import load_workbook

 

모듈을 가져옵니다.

 

wb = load_workbook('cell.xlsx')

ws = wb.active

 

가져올 파일을 wb 변수에 담고, 활성화 된 시트를 ws 변수에 담습니다.

 

for x in range(1,11):

    for y in range(1,11):

        print(ws.cell(column=x, row=y).value, end=" ")

    print()

 

for 문을 써서 column 과 row를 1부터 10까지의 좌표에 값을 가져옵니다.

 

결과값은 위와 같습니다.

 

셀의 개수(행과 열의 개수)를 모를때는 아래와 같이 작성하면 됩니다.

 

for x in range(1, ws.max_column + 1):

    for y in range(1, ws.max_row + 1):

        print(ws.cell(row=y, column=x).value, end=" ")

    print()

 

[end=" "] 를 사용하면 출력을 가로로 표시 해 줍니다.

 


 

이번에는 append를 사용하여 셀에 값을 입력해 보겠습니다.

 

from openpyxl import Workbook

from random import *

 

wb = Workbook()

ws = wb.active

 

모듈을 가져오고 변수를 지정합니다.

 

ws.append(['No''Eng''Math'])

 

듀플 형태로 내용을 입력합니다. append를 사용하면 A1부터 차례로 입력이 됩니다.

 

for i in range(1,11):

    ws.append([i, randint(0,100), randint(0,100)])

wb.save('cell_range.xlsx')

 

1부터 99까지의 숫자 중 랜덤값으로 입력을 하였습니다.

 

위와 같이 엑셀에 값이 입력되었습니다.

 

이번에는 데이터를 가져 와 보도록 하겠습니다.

 

col_B = ws['B']

print(col_B)

for cell in col_B:

    print(cell.value, end=" ")

B 칼럼만 데이터를 가져왔습니다. 결과값은 아래와 같습니다.

첫번째 row 만 가져오면 아래와 같이 사용할 수 있습니다.

 

row_title = ws[1]

for cell in row_title:

    print(cell.value)

 

2번째 줄에서 6번째 줄가지 가져올려면 아래와 같이 입력합니다.

 

row_range = ws[2:6]

for rows in row_range:

    for cell in rows:

        print(cell.value, end=" ")

    print()

 

2번째 줄에서 마지막 줄까지 마지막 줄까지 가져오려면 max_row를 사용하면 됩니다.

 

from openpyxl.utils.cell import coordinate_from_string

 

row_range = ws[2:ws.max_row]

for rows in row_range:

    for cell in rows:

        xy = coordinate_from_string(cell.coordinate)

        print(xy, end=" ")

    print()

 

coordinate_from_string을 사용하면 'A1', 'B2' 이런 형식의 좌표값을 가져올 수 있습니다.

 

결과는 위와 같이 나옵니다.

 

듀플 형태이기 때문에 하나만 가져올려면 인덱스 번호를 사용하면 됩니다.

 

print(xy[0]) 은 마지막 'C'를 반환하고, print(xy[1])은 11을 반환합니다. 

 

 

728x90
반응형

댓글