파이썬 프로그래밍

파이썬 엑셀 업무 자동화를 위한 샘플 프로그래밍

코니코니 2022. 10. 1. 18:00
반응형

파이썬 엑셀 업무 자동화를 위한 샘플 프로그래밍


파이썬을 활용해서 엑셀을 다루는 방법에 대해서 알아보도록 하겠습니다. 엑셀을 다루기 위해서는 openpyxl 모듈이 필요합니다.

cmd 명령어 입력에서 pip install openpyxl을 입력하고 모듈을 다운로드 합니다.

openpyxl에서도 다양한 기능들이 많이 있지만 대표적으로 사용이 되는 몇가지 기능들에 대해서 소개를 해보도록 하겠습니다. 먼저 전체 코드 예시를 볼까요?

from openpyxl import Workbook
from openpyxl.styles import Alignment
from openpyxl.styles import Font


data_box = [['고양이', '고양이', 10], ['강아지', '강아지', 20], ['토끼', '토끼', 30]]

# 엑셀파일 쓰기
write_wb = Workbook()

# 폰트 변수 생성, 글자 색깔 빨간색
ft = Font(color="FF0000")

# Sheet1에다 입력
write_ws = write_wb.active
write_ws.column_dimensions['A'].width = 20
write_ws.column_dimensions['B'].width = 20
write_ws.column_dimensions['C'].width = 20
write_ws['A1'] = 'url'
write_ws['A1'].alignment = Alignment(horizontal='center')
write_ws['A1'].font = ft  # A1에 폰트 옵션 적용
write_ws['B1'] = 'name'
write_ws['B1'].alignment = Alignment(horizontal='center')
write_ws['C1'] = 'count'
write_ws['C1'].alignment = Alignment(horizontal='center')

# 셀 단위로 간단하게 추가
# write_ws.cell(5, 5, '5행5열')

sell_count = 2
# 행 단위로 추가
for z in data_box:
    url = f'https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query={z[0]}'
    write_ws[f'A{sell_count}'].hyperlink = url
    write_ws[f'A{sell_count}'].value = z[0]
    write_ws[f'A{sell_count}'].style = "Hyperlink"
    write_ws[f'A{sell_count}'].alignment = Alignment(horizontal='center')

    write_ws[f'B{sell_count}'].value = z[1]
    write_ws[f'B{sell_count}'].alignment = Alignment(horizontal='center')

    write_ws[f'C{sell_count}'].value = z[2]
    write_ws[f'C{sell_count}'].alignment = Alignment(horizontal='center')
    sell_count += 1

write_wb.save(fr"엑셀 파일.xlsx")

data_box라는 리스트에서 항목들을 가져와 for문에 대입을 하고 엑셀로 옮겨서 저장을 하는 예시입니다.

# 엑셀파일 쓰기
write_wb = Workbook()

해당 코드로 엑셀을 다루기 위한 준비는 끝이 납니다. write_wb 변수로 이제 엑셀의 다양한 기능을 사용하게 되는 것이죠. 또한 하나의 엑셀 파일이 이 변수에 담겨있다고 볼 수 있습니다. write_wb라는 변수를 이용해서 엑셀에서 입력을 하는 것처럼 사용이 가능한거죠.

# 폰트 변수 생성, 글자 색깔 빨간색
ft = Font(color="FF0000")

원하는 위치에 빨간 색상을 추가하기 위해서 ft라는 변수에 기능을 담아놨습니다.

# Sheet1에다 입력
write_ws = write_wb.active
write_ws.column_dimensions['A'].width = 20
write_ws.column_dimensions['B'].width = 20
write_ws.column_dimensions['C'].width = 20
write_ws['A1'] = 'url'
write_ws['A1'].alignment = Alignment(horizontal='center')
write_ws['A1'].font = ft  # A1에 폰트 옵션 적용
write_ws['B1'] = 'name'
write_ws['B1'].alignment = Alignment(horizontal='center')
write_ws['C1'] = 'count'
write_ws['C1'].alignment = Alignment(horizontal='center')

본격적으로 엑셀에 문자를 입력하는 예시입니다. column_dimensions을 통해서 열의 가로 길이를 지정할 수 있습니다.

write_ws['A1'] = 'url'은 A1 위치에 url이라는 문자열을 추가합니다.

write_ws['A1'].alignment = Alignment(horizontal='center') 기능을 통해서 A1 위치를 가운데 정렬 합니다.

write_ws['A1'].font = ft  기능은 아까 위에서 미리 변수에 넣어뒀던 빨간 색상을 A1위치에 입히는 코드입니다.

나머지 B1, C1 또한 각각 name과 count 문자열을 추가합니다.

# 셀 단위로 간단하게 추가
# write_ws.cell(5, 5, '5행5열')

이 기능은 5, 5 위치에 바로 문자열을 추가하는 기능입니다. 위 코드에선 사용하지 않아서 주석으로 넣어놨습니다.

sell_count = 2
# 행 단위로 추가
for z in data_box:
    url = f'https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query={z[0]}'
    write_ws[f'A{sell_count}'].hyperlink = url
    write_ws[f'A{sell_count}'].value = z[0]
    write_ws[f'A{sell_count}'].style = "Hyperlink"
    write_ws[f'A{sell_count}'].alignment = Alignment(horizontal='center')

    write_ws[f'B{sell_count}'].value = z[1]
    write_ws[f'B{sell_count}'].alignment = Alignment(horizontal='center')

    write_ws[f'C{sell_count}'].value = z[2]
    write_ws[f'C{sell_count}'].alignment = Alignment(horizontal='center')
    sell_count += 1

여기는 for 반복문을 사용해서 data_box라는 리스트의 요소들을 하나씩 가져와서 엑셀에 추가하는 코드입니다. 먼저 write_ws[f'A{sell_count}'] 이렇게 적어둔 것은 위에 sell_count의 번호를 A 해당 위치를 지정하는 것이죠. 최초 sell_count는 2니까 처음 반복문에서는 write_ws[f'A2']라고 보면 됩니다. 아래쪽에 sell_count += 1로 인해서 반복문이 돌 때마다 작성되는 열의 위치는 증가하게 됩니다.

A열의 경우 하이퍼링크가 들어간 url이 들어가는 구간입니다. value가 보여지는 문자열의 형태를 저장하는 것이고 클릭을 했을 때 이동 될 url을 hyperlink에 대입을 해주면 됩니다. 스타일 또한 hyperlink로 지정을 해줘야 합니다. Alignment(horizontal='center') 기능은 위에서 설명했던 가운데로 정렬을 시키는 기능이겠죠.

B와 C 또한 data_box에서 가져온 데이터를 인덱스해서 value로 문자열을 추가해주는 것입니다. value 없이  write_ws[f'A{sell_count}'] = z[0] 이런 식으로 넣어줘도 문자열 지정이 가능합니다.

data_box = [['고양이', '고양이', 10], ['강아지', '강아지', 20], ['토끼', '토끼', 30]]

data_box의 경우 리스트 안에 각각의 리스트가 들어가기 때문에 for문에서 사용할 때 z[0]=고양이, z[1]=고양이, z[2]=10 이런 식으로 인덱스가 되는 것이죠.

이런 식으로 엑셀에 여러가지 내용을 입력하고

write_wb.save(fr"엑셀 파일.xlsx")

save 함수를 사용해서 xlsx 파일로 저장이 가능합니다.

excel 파일로 저장이 되는 것을 볼 수 있습니다. 컴퓨터에 엑셀이 안깔려 있어서 구글 스프레드시트에서 파일을 열어보도록 하겠습니다.

처음에 ft = Font(color="FF0000")로 입혀놨던 url 부분이 빨간 색상으로 잘 나오는 것을 볼 수 있습니다. 마찬가지로 A열의 경우 하이퍼링크가 들어간 모양을 볼 수 있죠.

이렇게 클릭을 해보면 기존에 넣어놨던 링크가 제대로 나오는 것을 볼 수 있습니다.

해당 단어와 일치하는 네이버 검색 페이지가 뜨는 것을 볼 수 있습니다.

openpyxl의 대표적인 기능들을 한번 살펴봤는데 반복문을 사용하면 더 다양하고 귀찮은 작업들을 어렵지 않게 자동화 시킬 수 있겠죠.

반응형