본문 바로가기
파이썬/업무자동화

[업무자동화] Python으로 Excel 작성하기 (openpyxl)

by Vacant June 2024. 4. 18.
반응형

1. 워크북(파일)과 워크시트

1-1. 파일 생성 및 저장

from openpyxl import Workbook

wb = Workbook()

wb.save(r"your_path\your_wb_name.xlsx") # 파일이 저장될 경로와 이름 입력

 

1-2. 워크시트 생성

from openpyxl import Workbook

wb = Workbook()
ws = wb.create_sheet('new_sheet_name') # 생성할 시트의 이름을 입력

wb.save(r"your_path\your_wb_name.xlsx") # 파일이 저장될 경로와 이름 입력

 

1-3. 워크시트 삭제

from openpyxl import Workbook

wb = Workbook()
ws = wb.create_sheet('sheet_name') # 생성할 시트의 이름을 입력
wb.remove(wb['Sheet']) # 삭제할 시트의 이름을 입력

wb.save(r"your_path\your_wb_name.xlsx") # 파일이 저장될 경로와 이름 입력

 

2. 셀 다루기

2-1. 하나의 셀

from openpyxl import Workbook

wb = Workbook()
ws = wb['Sheet'] # 기본 워크시트 사용

ws.cell(row=2, column=2).value = 'hello' # 예시: 2행2열의 셀(B2)에 내용 입력

wb.save(r"your_path\your_wb_name.xlsx") # 파일이 저장될 경로와 이름 입력

from openpyxl import Workbook

wb = Workbook()
ws = wb['Sheet']  # 기본 워크시트 사용

ws['B2'] = 'hello'  # 예시: B2 셀(2행 2열)에 내용 입력

wb.save(r"your_path\your_wb_name.xlsx")  # 파일이 저장될 경로와 이름 입력

두 코드의 결과는 같습니다. 행과 열에 해당하는 숫자로 코드를 구성(위)할 수도 있고, B2와 같이 직접적으로 셀 이름으로 코드를 구성(아래)할 수도 있습니다.

 

2-2 여러 개의 셀

from openpyxl import Workbook

wb = Workbook()
ws = wb['Sheet']  # 기본 워크시트 사용

# 예시: A1부터 G8까지 모든 셀에 내용 입력
for row in range(1, 9):  # 1행부터 8행까지
    for col in range(1, 8):  # 1열(A)부터 7열(G)까지
        ws.cell(row=row, column=col).value = 'hello'

wb.save(r"your_path\your_wb_name.xlsx")  # 파일이 저장될 경로와 이름 입력

from openpyxl import Workbook
from openpyxl.utils import column_index_from_string # 열 인덱스를 숫자로 변경하는 함수 불러오기

wb = Workbook()
ws = wb['Sheet']  # 기본 워크시트 사용

# 예시: A1부터 G8까지 모든 셀에 내용 입력
for row in range(1, 9):  # 1행부터 8행까지
    for col_index in range(column_index_from_string('A'), column_index_from_string('G') + 1):  # A열부터 G열까지
        ws.cell(row=row, column=col_index).value = 'hello'

wb.save(r"your_path\your_wb_name.xlsx")  # 파일이 저장될 경로와 이름 입력

두 코드의 결과는 같습니다. 숫자로 셀의 행과 열을 표현하여 코드를 구성(위)할 수도 있고 column_index_from_sting 함수(열 인덱스를 숫자로 변환해주는 함수)를 이용하여 알파벳으로 코드를 구성(아래)할 수도 있습니다.

참고: 숫자를 열 인덱스로 변환하는 함수는 get_coloumn_letter(숫자) 입니다.

 

2-3 모든 셀

from openpyxl import Workbook
from openpyxl.styles import Alignment

wb = Workbook()
ws = wb['Sheet']  # 기본 워크시트 사용

# 예시: A1부터 G8까지 모든 셀에 내용 입력
for row in range(1, 9):  # 1행부터 8행까지
    for col in range(1, 8):  # 1열(A)부터 7열(G)까지
        ws.cell(row=row, column=col).value = 'hello'

# 예시: 모든 셀에 대하여 가운데 정렬
for row in ws.rows:
    for cell in row:
        cell.alignment = Alignment(horizontal="center", vertical="center")

wb.save(r"your_path\your_wb_name.xlsx")  # 파일이 저장될 경로와 이름 입력

 

2-4 셀에 내용 입력 (2-1, 2-2 코드 참조)

단순 텍스트 뿐 아니라 정수나 실수와 같은 숫자, '='으로 시작하는 함수를 작성할 수 있습니다.

 

2-5 셀 정렬 (2-3 코드 참조)

Horizontal Alignment 옵션:

  • general: 일반적인 정렬 (기본값)
  • left: 텍스트를 셀의 왼쪽에 정렬
  • center: 텍스트를 셀의 가운데에 정렬
  • right: 텍스트를 셀의 오른쪽에 정렬
  • fill: 텍스트를 반복하여 셀을 채움
  • justify: 텍스트를 양쪽 끝에 맞춤
  • centerContinuous: 중앙 연속 정렬, 연속된 여러 셀에 걸쳐 가운데 정렬
  • distributed: 텍스트를 셀 전체에 균등하게 분포

Vertical Alignment 옵션:

  • top: 텍스트를 셀의 위쪽에 정렬
  • center: 텍스트를 셀의 중앙에 정렬
  • bottom: 텍스트를 셀의 아래쪽에 정렬
  • justify: 텍스트를 셀의 상하좌우를 모두 맞춤
  • distributed: 텍스트를 셀의 상하에 균등하게 분포

 

2-6 셀 배경

from openpyxl import Workbook
from openpyxl.styles import PatternFill

wb = Workbook()
ws = wb['Sheet']  # 기본 워크시트 사용

# 예시: A1부터 G8까지 모든 셀에 내용 입력
for row in range(1, 9):  # 1행부터 8행까지
    for col in range(1, 8):  # 1열(A)부터 7열(G)까지
        ws.cell(row=row, column=col).value = 'hello'

# 예시: 모든 셀에 단색-빨강 배경
for row in ws.rows:
    for cell in row:
        cell.fill = PatternFill(fgColor="F00000", fill_type="solid")

wb.save(r"your_path\your_wb_name.xlsx")  # 파일이 저장될 경로와 이름 입력

 

2-7 셀 크기

2-7-1 열 너비

from openpyxl import Workbook
from openpyxl.styles import Alignment

wb = Workbook()
ws = wb['Sheet']  # 기본 워크시트 사용

# 예시: A1부터 G8까지 모든 셀에 내용 입력
for row in range(1, 9):  # 1행부터 8행까지
    for col in range(1, 8):  # 1열(A)부터 7열(G)까지
        ws.cell(row=row, column=col).value = 'hello'

ws.column_dimensions['A'].width = 20
ws.column_dimensions['B'].width = 15
ws.column_dimensions['C'].width = 10

wb.save(r"your_path\your_wb_name.xlsx")  # 파일이 저장될 경로와 이름 입력

 

2-7-2 행 높이

from openpyxl import Workbook
from openpyxl.styles import Alignment

wb = Workbook()
ws = wb['Sheet']  # 기본 워크시트 사용

# 예시: A1부터 G8까지 모든 셀에 내용 입력
for row in range(1, 9):  # 1행부터 8행까지
    for col in range(1, 8):  # 1열(A)부터 7열(G)까지
        ws.cell(row=row, column=col).value = 'hello'

ws.row_dimensions[1].height = 50
ws.row_dimensions[2].height = 30
ws.row_dimensions[3].height = 20

wb.save(r"your_path\your_wb_name.xlsx")  # 파일이 저장될 경로와 이름 입력

 

3. 그래프

 

728x90

댓글