본문 바로가기
학부 자료/Python

[Python] 파이썬 기초 18/20, 엑셀 활용

by jackMK 2023. 11. 7.

<내용정리>

- 관련 파일

18일차_230102.py
0.01MB


- 본문

### 엑셀 파일 생성 및 저장하기
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
ws.title = '시트1'
ws.append(['이름', '나이', '성별'])
ws.append(['이순신', '55', '남자'])
wb.save(filename='./openpyxl/테스트.xlsx')

### 엑셀 파일 불러와 내용 수정 후 저장하기
from openpyxl import load_workbook
wb = load_workbook(filename='./openpyxl/테스트.xlsx')  # 파일 열기
ws = wb.active  # 시트 활성화
ws.append(['홍길동', '40', '남자'])  # 행 추가
wb.save(filename='./openpyxl/테스트.xlsx')  # 저장

### 시트 복사하기
from openpyxl import load_workbook
wb = load_workbook(filename='./openpyxl/테스트.xlsx')
wb.copy_worksheet(wb['시트1'])
wb.active = wb['시트1 Copy']
wb.save(filename='./openpyxl/샘플_시트 복사.xlsx')

### 시트 이름 바꾸기
from openpyxl import load_workbook
wb = load_workbook(filename='./openpyxl/샘플_시트 복사.xlsx')
print(wb.sheetnames)
wb['시트1 Copy'].title = '시트1 복사'
wb.save(filename='./openpyxl/샘플_시트 복사.xlsx')
print(wb.sheetnames)

### 셀의 내용 확인하기
from openpyxl import load_workbook
wb = load_workbook(filename='./openpyxl/테스트.xlsx')
ws = wb['시트1']
print(ws['A1'].value)
print(ws[1][0].value)

### 반복문을 통해 셀 정보에 접근하기
for row in ws:
    print(row)
print()
for row in ws:
    for cell in row:
        print(f'셀 객체명 : {cell}, 셀 값 : {cell.value}')

### 셀의 내용 수정하기
from openpyxl import load_workbook
wb = load_workbook(filename='./openpyxl/테스트.xlsx')
ws = wb['시트1']
ws['A1'] = '성명'  # 셀의 값 수정
wb.save(filename='./openpyxl/테스트_셀 내용 변경.xlsx')

### 반복문을 통해 셀 정보에 순차적으로 접근, 값 변경하기
from openpyxl import load_workbook
wb = load_workbook(filename='./openpyxl/테스트.xlsx')
ws = wb['시트1']
new_data = ['신사임당', '45', '여자']
row_no = 1
for row in ws:
    if row_no == 2:
        for cell in row:
            cell.value = new_data[cell.col_idx-1]
    row_no += 1
wb.save(filename='./openpyxl/테스트_셀 내용변경(반복문).xlsx')

### 셀의 내용 입력하기
from openpyxl import load_workbook
wb = load_workbook(filename='./openpyxl/테스트.xlsx')
ws = wb['시트1']
ws['A4'] = '심사임당'
ws['B4'] = '45'
ws['C4'] = '여자'
ws.append(['을지문덕', '60', '남자'])
new_data_list = [['유관순', '16', '여자'], ['세종대왕', '60', '남자']]

for new_data in new_data_list:
    ws.append(new_data)
wb.save(filename='./openpyxl/테스트_셀 내용 입력.xlsx')

### 행/열 삭제하기
from openpyxl import load_workbook
wb = load_workbook(filename='./openpyxl/테스트.xlsx')
ws = wb['시트1']
ws.delete_rows(idx=2, amount=1)
ws.delete_cols(idx=2, amount=2)
wb.save(filename='./openpyxl/테스트_행과 열의 삭제.xlsx')

### 셀 복사하기
from openpyxl import load_workbook
wb = load_workbook(filename='./openpyxl/테스트.xlsx')
ws = wb['시트1']
src = ws['A2'].value
ws['A5'] = src

for row in ws['A6:C6']:
    for cell in row:
        cell.value = src

wb.save(filename='./openpyxl/테스트_셀 복사1.xlsx')

### 여러 셀 복사하기
from openpyxl import load_workbook
wb = load_workbook(filename='./openpyxl/테스트.xlsx')
ws = wb['시트1']
src_data = []
for cell in ws[2]:
    src_data.append(cell.value)
print(src_data)

for row in ws['A5:C5']:
    for cell in row:
        cell.value = src_data[cell.col_idx-1]
wb.save(filename='./openpyxl/테스트_셀 복사2.xlsx')

### 셀 병합 및 해제하기
from openpyxl import load_workbook
wb = load_workbook(filename='./openpyxl/테스트.xlsx')
ws = wb['시트1']
ws.merge_cells('A1:B1')  # A1, B1 셀 병합
ws.merge_cells('A2:B2')
ws.unmerge_cells('A2:B2')  # 셀 병합 해제
wb.save(filename='./openpyxl/테스트_셀 병합.xlsx')

### 텍스트 형식을 숫자 형식으로 바꾸고 엑셀 함수로 연산하기
from openpyxl import load_workbook
wb = load_workbook(filename='./openpyxl/테스트.xlsx')
ws = wb['시트1']
ws['B2'].data_type = 'i'
ws['B3'].data_type = 'i'
ws['A4'] = '나이 합계'
ws['B4'] = '=sum(B2:B3)'
wb.save(filename='./openpyxl/테스트_셀 연산.xlsx')

### 셀 배경과 폰트 서식 변경하기
from openpyxl import load_workbook
wb = load_workbook(filename='./openpyxl/테스트.xlsx')
ws = wb['시트1']
from openpyxl.styles import Font, PatternFill
# 배경 검은색, 글자색 흰색, 폰트 크기 12, 볼드체
fill_style = PatternFill(fill_type='solid', start_color='000000')
font_style = Font(color='FFFFFF', sz=12, bold=True)

for row in ws:
    for cell in row:
        if cell.row == 1:
            cell.fill = fill_style
            cell.font = font_style

## 셀 높이와 너비 조정하기
# 1~5행의 높이 24, 1열의 너비를 14로 변경
for i in range(1, 6):
    ws.row_dimensions[i].height = 24

ws.column_dimensions['A'].width = 14

## 텍스트 정렬하기
from openpyxl.styles import Alignment
# 가로와 세로 정렬 값을 중앙으로 변경하는 객체 생성
alignment_style = Alignment(horizontal='center', vertical='center')
for row in ws:
    for cell in row:
        cell.alignment = alignment_style

## 셀 테두리 서식 변경하기
from openpyxl.styles import Side, Border
side_style = Side(style='medium', color='000000')
border_styles = Border(left=side_style, right=side_style, top=side_style, bottom=side_style)
for row in ws:
    for cell in row:
        cell.border = border_styles
wb.save(filename='./openpyxl/테스트_셀 배경과 폰트 서식 변경.xlsx')

loading