본문 바로가기
업무자동화

파이썬으로 엑셀파일 수정하기

by 감튜 2023. 3. 15.
반응형

일단 지난 시간에 만들었던 excel.py 파일을 열어 봅시다. 

from openpyxl import load_workbook

aa = load_workbook(filename='practice.xlsx', read_only=True)
ws = aa['3단']

for row in ws.rows:
    for cell in row:
        print(cell.value)

 

이제 모든 칸에 있는 셀을 읽어 올 필요 없으니 for row in ~줄부터는 삭제를 해주겠습니다.

B열에 구구단4단을 작성하여 보겠습니다.

 

한 칸씩 입력하는 방법

ws['B1']=4

b1셀에 4라는 값을 넣어보았습니다. 그런데 우리는 최대한 간편하게 이용하고 싶습니다. 그렇다면 여러 셀에 여러 개의 자료들을 한 번에 넣을 수 있는 방법을 찾아봅시다. 셀을 이름을 붙이는 방법은 B1, B2 이런 식으로 붙일 수는 있겠지만, 행이 몇 번째 행인지, 열이 몇 번째 열인지를 숫자로만 표현도 가능합니다. 

예를 들어, 

for i in range(2,10):
    ws.cell(column=2,row=i, value=4*i)

for은 반복문을 의미합니다.  in 앞에 있는 i가 내가 정한 변수이고, range는 범위를 이야기합니다. 일단 range에 대해 살펴보겠습니다. range(2,10) 은 2,3,4,5,6,7,8,9까지입니다. 시작하는 숫자는 2부터가 맞지만, 끝나는 숫자는 10보다 하나 작은 9까지만 표현됩니다. 1,2,3,···,20 까지를 표현 해 봅시다. range(시작숫자, 끝숫자+1)이라고 생각하면 range(1,21)이 됩니다. 행동이 어떻게 이뤄지는지 확인을 해보겠습니다.

 

for 구문을 통해 i가 일단 2가 뽑혔습니다. 그리고는 ws.cell을 통해 다음 행동들을 지시하겠습니다. column=2 의 의미는 2번째 열인 B열이 됩니다. 우리는 B열에 구구단 4단을 적을 예정이므로, 바뀔 필요 없이 column=2로 고정되면 됩니다. row=i의 의미는 열이 i에 해당하게 됩니다. 지금 뽑혀있는 i는 2 이므로 B2열에 글을 입력하겠다라고 생각하면 되겠습니다. value=4*i의 의미는 value가 입력값입니다. 4*2는 아시다시피 8이라는 값이기 때문에 B2에 8이라는 값을 입력하자는 의미가 되었습니다. 그럼 컴퓨터는 다시 for 구문으로 돌아가서 그다음 숫자인 3을 뽑고 위 행동을 반복하게 됩니다. B3이라는 셀에 4*3인 12의 값을 입력하게 됩니다. 어디까지 입력할까요? for 구문이 9까지 돌아가기에 B9셀에 36이라는 입력값을 넣게 되고 for 구문이 완료됩니다. 마무리하고 저장까지 해보겠습니다.

 


aa.save('practice.xlsx')
aa.close()

우리가 열었던 practice.xlsx 파일을 열어서 수정은 했지만, 저장하지 않는 다면 무용지물입니다. 이것도 마찬가지로 저장해주는게 중요합니다. aa.save('파일명') 직관적으로 save의 의미 때문에 파일을 저장한 다는 것을 알 수 있습니다. 마지막으로 aa.close()는 화면에 보이지는 않지만 컴퓨터가 백그라운드에서 엑셀파일을 열고 입력하고 저장까지 했기 때문에 닿아 주는 것입니다. 그럼 엑셀 파일을 열어서 어떻게 입력되어있는지 확인해 보겠습니다. 

 

잘 입력되었습니다. 3단을 10행 까지 해놓고 4단은 9단까지 해놓으니 아쉽습니다. 여러분이 직접 10단까지 하려면 어딜 고쳤어야 할지 생각해 보시면 좋을 것 같습니다. 더불어 c열에 5단, d열에 6단 , e열에 7단을 매번 쓰지 않고 for 구문안에 for 구문을 넣어 간편하게 정리해 볼 수도 있습니다. 

 

for j in range(2,6):
    for i in range(1,11):
        ws.cell(column=j,row=i, value=(j+2)*i)

처음 for 구문에서 먼저 j가 선택이 됩니다. 얼마가 선택이 될까요? j=2가 선택이 됩니다. 그다음 두번째 for 구문에서 i가 선택이 됩니다. 마찬가지 얼마가 선택이 될까요? i=1이 선택이 되었습니다. 그럼 ws.cell에서 B1셀이 선택이 된 거고, 값은 4*1인 4가 입력이 됩니다. 그다음으로는 바로 첫 번째 for 구문으로 올라가는 게 아니라 두 번째 구문에서 i만 2로 바뀌게 됩니다. 다시 ws.cell을 통해 B2셀에 4*2인 8이 입력되게 됩니다. 그다음도 i가 10까지 다 돌아간 다음, 첫 번째 for 구문으로 올라가 j가 3이 됩니다. 그 후 두 번째 for 구문의 i를 다시금 1,···,10까지 반복되게 됩니다. 이해하셨나요? 그렇게 되면 컴퓨터는 4단을 10개 입력한 다음, 5단 ,6단,7단 순서로 입력하게 되는 것입니다.

 

결과물을 보여 드리겠습니다.

 

일일이 50칸을 숫자 하나하나 계산하며 써 내려가는 것보다, 조금만 공부하면 단 3줄의 코드만으로 써내려 갈수 있게 됩니다. 편하지 않다고 생각하실 수 있겠지만, 훨씬 많은 양의 데이터가 있었다고 생각을 해 봅시다. 100*100칸이었다면? 아니면 1000*1000칸이었다면? 물론 새로운 것을 학습하는 게 어려울 순 있겠지만, 조금만 공부해 보면 많은 양의 일들을 쉽게 해결할 수 있는 방법이 생겼습니다. 그만큼 여러분은 많은 시간을 절약할 수 있게 되었습니다.

반응형

댓글