Python/PYTHON OpenPyXL (python and excel)

[openpyxl] loop 만들기

시키테이 2020. 6. 1. 08:52
반응형

엑셀 각 셀 별로 loop를 만들어보도록 하겠습니다. 우선 각 셀의 coordinate를 한 번 만들어볼까요? 가장 기본적인 루프 형식은 숫자를 직접 지정해주는 겁니다. 

 

wb=Workbook()
ws=wb["Sheet"]
for row in range (1, 4):
    for col in range (1, 4):
        cell=ws.cell(row=row, column=col)
        print(cell.coordinate, end="!")
    print()

이렇게 하면 아래와 같이 각 셀의 좌표들이 나오게 됩니다. 

A1!B1!C1!

A2!B2!C2!

A3!B3!C3!

 

여기서 매우 중요한 것은 마지막은 range에 포함되지 않는다는 것. 다시 말해 4열과 4행은 들어가지 않습니다! 

 

만약에 행열을 바꿔주면 다음과 같이 나오겠죠. 

for row in range (1, 4):
    for col in range (1, 4):
        cell=ws.cell(row=col, column=row)
        print(cell.coordinate, end="!")
    print()

A1!A2!A3!

B1!B2!B3!

C1!C2!C3!

 

위와 같이 하는 것이 가장 직관적인 방식이겠습니다만, 조금 더 확실히 하기 위해 명령문을 통해 루프 범위를 정해주는 경우가 있습니다. iter_rows와 iter_cols를 통해서 하는 방식입니다. 

 

iter_rows를 쓰게 되면 row부터 시작한다는 뜻이겠죠. 

for row in ws.iter_rows(min_row=1, max_row=3, min_col=1, max_col=4):
    print (row)

(<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>)

 

이 경우에는 행열 최대값이 다 반영된다는 점! (3행, 4열 다 들어감)

그리고 행을 기준으로 햇기 때문에 한 행 기준으로 위에서 보는 것처럼 tuple이 만들어집니다. 

 

만약에 row대신 column을 쓰게 되면 칼럼 기준으로 tuple이 만들어지겠죠?

for col in ws.iter_cols(min_row=1, max_row=3, min_col=1, max_col=4):
    print (col)

(<Cell 'Sheet'.A1>, <Cell 'Sheet'.A2>, <Cell 'Sheet'.A3>)

(<Cell 'Sheet'.B1>, <Cell 'Sheet'.B2>, <Cell 'Sheet'.B3>)

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

(<Cell 'Sheet'.D1>, <Cell 'Sheet'.D2>, <Cell 'Sheet'.D3>)

 

만약 셀 단위로 쪼개고 싶다고 하면 여기에 다시 cell을 추가해주면 됩니다. 

for row in ws.iter_rows(min_row=1, max_row=3, min_col=1, max_col=4):
    for cell in row:
        print (cell.coordinate, end="!")
    print()

A1!B1!C1!D1!

A2!B2!C2!D2!

A3!B3!C3!D3!

반응형