반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

 

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART)나 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 


오늘은 지난 시간의 엑셀 시트 취합 프로젝트의 업그레이드 버전을 가져와봤습니다.

 

이번 프로그램의 컨셉은 아래와 같습니다. 참고로 해당 프로젝트는 제품 모델당 자동으로 생성되는 Report들을 한번에 취합해서 프린팅 하기 위한 프로그램입니다.

 

수 십, 수 백개의 엑셀 파일을 하나씩 열어가며 인쇄 버튼을 누르는 것보다 훨씬 시간을 절약할 수 있겠죠?

 

1. 전체 코드

 

코드에 대한 설명은 주석으로 대체하도록 하겠습니다. 최대한 자세히 달아두었으나 이해가지 않으시는 부분은 댓글로 질문해주세요!

 

# step1.관련 모듈 및 패키지 import
import glob
import win32com.client
import tkinter
from tkinter import filedialog
import os

# step2.폴더 선택 (Tkinter)
root = tkinter.Tk()
root.withdraw()
path = filedialog.askdirectory(parent=root, initialdir="./", title="폴더를 선택 해 주세요")

# step3.glob 모듈로 원하는 폴더 내의 모든 xlsx 파일의 경로를 리스트로 반환
list_filepath = glob.glob(path + '/**/*.xlsx', recursive=True)

# step4.역슬레시로 출력되는 부분 슬레시로 변환
list_filepath_slash = [i.replace("\\", "/", 5) for i in list_filepath]

# step5.복사한 시트의 이름을 각 Report가 존재하는 폴더 이름으로 변경해주기 위한 폴더명 리스트
list_folder_name = os.listdir(path)

# step6.win32com(pywin32)를 이용해서 엑셀 어플리케이션 열기
excel = win32com.client.Dispatch("Excel.Application")
excel.Visible = True #실제 작동하는 것을 보고 싶을 때 사용

# step7.엑셀 어플리케이션에 새로운 Workbook 추가
wb_new = excel.Workbooks.Add()

# step8.엑셀 시트를 추출하고 새로운 엑셀에 붙여넣는 반복문
for i, filepath in enumerate(list_filepath_slash):

    # 받아온 엑셀 파일의 경로를 이용해 엑셀 파일 열기
    wb = excel.Workbooks.Open(filepath)

    # 새로 만든 엑셀 파일에 추가
    # 추출할wb.Worksheets("추출할 시트명").Copy(Before=붙여넣을 wb.Worksheets("기준 시트명")
    wb.Worksheets("1번 문서").Copy(Before=wb_new.Worksheets("Sheet1"))
    
    # 시트명을 원래 Report 파일이 존재하던 폴더명으로 변경 
    ws = wb_new.Worksheets('1번 문서')
    ws.Name = list_folder_name[i]
    
    # copy 작업이 끝난 Workbook 종료
    wb.Close()

# 처음 새로운 엑셀파일이 생성될 때 존재하는 "Sheet1" 시트 삭제
wb_new.Worksheets("Sheet1").Delete()

# step6. 취합한 엑셀 파일을 "통합 문서"라는 이름으로 저장
wb_new.SaveAs(r"C:\Users\SANGWOO\Desktop\VSCODE\통합 문서.xlsx")

# step7. 켜져있는 엑셀 및 어플리케이션 모두 종료
excel.Quit()

 

2. 새롭게 알게 된 점

 

1)  윈도우의 기준, 파일 혹은 폴더 경로에 /(슬레시)와, \(역슬레시)가 섞여서 들어가면 에러가 난다

 

아래의 코드와 같이 Tkinter로 폴더 경로를 선택한 후, glob 모듈로 하위 폴더 내의 모든 xlsx파일의 경로를 리스트로 받아서 출력해보니 다음과 같이 출력되었습니다. 

 

해당 문제는 전체 코드에서는 개선하여 반영하였습니다.

 

import glob
import tkinter
from tkinter import filedialog

root = tkinter.Tk()
root.withdraw()
path = filedialog.askdirectory(parent=root, initialdir="./", title="폴더를 선택 해 주세요")
print("path : ", path)

list_filepath = glob.glob(path + '/**/*.xlsx', recursive=True)

for i in list_filepath:
    print(i)

 

<출력 결과>

path :  C:/Users/SANGWOO/Desktop/VSCODE/엑셀 시트 취합
C:/Users/SANGWOO/Desktop/VSCODE/엑셀 시트 취합\1번 제품\Report.xlsx
C:/Users/SANGWOO/Desktop/VSCODE/엑셀 시트 취합\2번 제품\Report.xlsx
C:/Users/SANGWOO/Desktop/VSCODE/엑셀 시트 취합\3번 제품\Report.xlsx
C:/Users/SANGWOO/Desktop/VSCODE/엑셀 시트 취합\4번 제품\Report.xlsx
C:/Users/SANGWOO/Desktop/VSCODE/엑셀 시트 취합\5번 제품\Report.xlsx

 

 

2) win32com으로 엑셀을 다룰 때, 같은 이름의 엑셀 파일이 열리면 아래와 같은 오류가 발생한다

 

아래와 같은 에러를 띄우면서 시트를 복사하는 부분에서 걸리는 문제가 발생해서 원인을 찾다보니, Report라는 엑셀 파일을 열고 닫지 않고 그다음 폴더의 Report 파일을 열어서 문제가 발생하는 것을 파악하였습니다.

 

이를 해결하기 위해서는 wb.Close( ) 명령을 사용해야합니다.

 

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-42-3f47d6541631> in <module>
     39     # 새로 만든 엑셀 파일에 추가
     40     # 추출할wb.Worksheets("추출할 시트명").Copy(Before=붙여넣을 wb.Worksheets("기준 시트명")
---> 41     wb.Worksheets("1번 문서").Copy(Before=wb_new.Worksheets("Sheet1"))
     42 
     43 # 처음 새로운 엑셀파일이 생성될 때 존재하는 "Sheet1" 시트 삭제

AttributeError: 'NoneType' object has no attribute 'Worksheets'

 

직접 동일명 엑셀 파일을 열었을 때 출력되는 메시지

 

 

3) win32com으로 엑셀 시트 이름을 바꾸는 방법

 

ws = wb.Worksheets('변경 전 시트 이름')

ws.Name = '변경 후 시트명'

 

 


 

<참고 자료>

 

https://url.kr/jqxl4b

 

파이썬 Replace, 폴더 디렉토리 경로 "\"→"/" 자동 변경 방법 (Python)

파이썬을 활용해서 머신러닝, 이미지 프로세스 관련 개발을 하면서 폴더 혹은 디렉토리 경로를 입력하는 일이 많습니다. 하지만, 컴퓨터에서 사용되는 경로에는 역슬래쉬인 "\"가 사용되며, 파

muzukphysics.tistory.com

 

https://stackoverflow.com/questions/31330941/python-win32-excel-copy-worksheet-and-change-name-of-copied-worksheet

 

python win32 excel copy worksheet and change name of copied worksheet

I'm trying to use python win32 excel application in order to: 1) copy a worksheet 2) change the name of the copied worksheet Using the following code: from win32com.client import Dispatch xl =

stackoverflow.com

 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

 

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART)나 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

Win32com 모듈을 사용하려면 pywin32라는 패키지를 설치하셔야 합니다.

 

설치 방법은 지난 글을 참고해주세요.

 

2021.12.12 - [파이썬 패키지/엑셀] - [파이썬 엑셀/PyWin32 ] 개별 엑셀 파일의 특정 시트들을 새로운 엑셀 파일에 모두 합치기 (ft. Openpyxl로는 못함)


오늘은 하나의 엑셀 파일에 있는 엑셀 시트를 각각 분리해서 엑셀 파일로 저장해보는 프로젝트를 해보겠습니다.

 

대략적인 컨셉은 다음과 같습니다. 

 


 

1. 전체 코드

 

코드에 대한 설명은 주석으로 대체하도록 하겠습니다. 최대한 자세히 달아두었으나 이해가지 않으시는 부분은 댓글로 질문해주세요!

 

# step1.관련 모듈 및 패키지 import
import win32com.client

# step2.win32com(pywin32)를 이용해서 엑셀 어플리케이션 열기
excel = win32com.client.Dispatch("Excel.Application")
excel.Visible = True #실제 작동하는 것을 보고 싶을 때 사용

# step3. 분리할 엑셀 파일이 있는 폴더 경로
path = r"C:\Users\SANGWOO\Desktop\VSCODE\엑셀 시트 분리"+"/"

# step4.분리하고자 하는 엑셀 통합문서 가져오기
wb = excel.Workbooks.Open(path + "통합 문서.xlsx")

# step5.통합문서의 엑셀 시트들의 이름을 리스트로 받기
Sheet_list = [sheet.Name for sheet in wb.Sheets]

# step6. 엑셀 시트 분리 및 저장 반복문
for sheet in Sheet_list:
    
    # 시트를 분리 저장할 새로운 엑셀 파일 open
    wb_new = excel.Workbooks.Add()

    # 통합문서의 시트 하나를 새로운 엑셀 문서에 copy
    wb.Worksheets(sheet).Copy(Before=wb_new.Worksheets("Sheet1"))
    
    # 처음 새로운 엑셀파일이 생성될 때 존재하는 "Sheet1" 시트 삭제
    wb_new.Worksheets("Sheet1").Delete()
    
    # 기존 경로에 시트명을 파일명으로 엑셀 파일 저장
    wb_new.SaveAs(path + sheet + ".xlsx")

# step7. 켜져있는 엑셀 및 어플리케이션 모두 종료
excel.Quit()

 

 

2. 새롭게 알게 된 점

 

1) win32com 모듈로 엑셀 시트 이름 얻는 법 & 리스트로 저장

 

# step5.통합문서의 엑셀 시트들의 이름을 리스트로 받기
Sheet_list = [sheet.Name for sheet in wb.Sheets]

 

<참고 링크>

 

2) win32com 모듈로 엑셀 시트 삭제하는 법

 

    # 삭제할 시트가 있는 wb.Worksheets("삭제할 시트명").Delete()
    
    wb.Worksheets("Sheet1").Delete()

 

 


오늘 준비한 내용은 여기까지입니다.

 

이 글이 도움이 되셨다면, 좋아요나 댓글을 남겨주세요. 블로그를 운영하는데에 큰 힘이 됩니다.

 

감사합니다.

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

 

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART)나 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 


오늘은 제목과 같이 개별 엑셀 파일의 특정 시트들을 새로운 엑셀 파일에 모두 합치는 파이썬 프로그램을 만들어 보겠습니다.

 

대략적인 컨셉은 다음과 같습니다. 보시다시피 이번 시간에는 openpyxl 대신에 Windows OS에서 Office 프로그램을 제어해 줄 수 있는 Pywin32 패키지를 사용하였습니다.

 

 

자세한 개념에 대한 설명은 아래의 링크를 참고해주시고, 저는 코드 설명만 드리도록 하겠습니다.

 

https://wikidocs.net/153820

 

2) win32com 통해 엑셀 다루기 - 1편

win32com에 속한 client라는 모듈을 활용하여 엑셀을 제어할 수 있습니다. 이번 편에서는 win32com.client를 이용해서 엑셀을 제어하는 기본적인 방법에 ...

wikidocs.net

 


 

1. 전체 코드

 

코드에 대한 설명은 주석으로 대체하도록 하겠습니다. 최대한 자세히 달아두었으나 이해가지 않으시는 부분은 댓글로 질문해주세요!

 

# step1.관련 모듈 및 패키지 import
import glob
import win32com.client

# step2.win32com(pywin32)를 이용해서 엑셀 어플리케이션 열기
excel = win32com.client.Dispatch("Excel.Application")
excel.Visible = True #실제 작동하는 것을 보고 싶을 때 사용

# step3.엑셀 어플리케이션에 새로운 Workbook 추가
wb_new = excel.Workbooks.Add() 

# step4.glob 모듈로 원하는 폴더 내의 모든 xlsx 파일의 경로를 리스트로 반환
list_filepath = glob.glob(r'C:\Users\SANGWOO\Desktop\VSCODE\엑셀 샘플\*.xlsx', recursive=True)

# step5.엑셀 시트를 추출하고 새로운 엑셀에 붙여넣는 반복문
for filepath in list_filepath:

    # 받아온 엑셀 파일의 경로를 이용해 엑셀 파일 열기
    wb = excel.Workbooks.Open(filepath)
    
    # 새로 만든 엑셀 파일에 추가
    # 추출할wb.Worksheets("추출할 시트명").Copy(Before=붙여넣을 wb.Worksheets("기준 시트명")
    wb.Worksheets("코딩유치원").Copy(Before=wb_new.Worksheets("Sheet1"))

# step6. 취합한 엑셀 파일을 "통합 문서"라는 이름으로 저장
wb_new.SaveAs(r"C:\Users\SANGWOO\Desktop\VSCODE\엑셀 샘플\통합 문서.xlsx")

# step7. 켜져있는 엑셀 및 어플리케이션 모두 종료
excel.Quit()

 

 

2. 새롭게 알게 된 점

 

1) openpyxl은 Workbook끼리 Sheet이동이 되지 않는다.

 

for filepath in list_filepath:
    
    wb = op.load_workbook(filepath)
    
    ws = wb["코딩유치원"]
    
    wb_new.copy_worksheet(ws)
    
    wb_new.save("통합 문서.xlsx")

 

위의 코드로 시트 이동을 시도해보았으나 아래와 같은 에러를 출력했습니다.

 

ValueError: Cannot copy between worksheets from different workbooks

 

 

2) Pywin32 패키지는 Windows OS 전용이다. (Mac OS에 MS 프로그램이 있어도 안됨)

 

아래의 사진은 Mac OS에서 pywin32를 설치하려 했을 때 출력되는 에러입니다.

제가 잘 못해서 그럴 가능성도 있지만, 애초에 pywin32가 윈도우 전용 패키지가 아닐까 생각됩니다.

 

 

3) Pywin32 패키지 설치방법

 

Windows에서 주피터 노트북을 이용해서 pywin32를 설치하니 커널이 먹통이 되는 문제가 발생했습니다.

 

해결책은 Anaconda 인터프리터를 사용할 때에는 pip가 아닌 conda로 install 해주어야 하는 것이었습니다.

 

conda install -c anaconda pywin32

 

<참고한 블로그>

https://gentlesark.tistory.com/112

 

 


오늘 준비한 내용은 여기까지입니다.

 

이 글이 도움이 되셨다면, 좋아요나 댓글을 남겨주세요. 블로그를 운영하는데에 큰 힘이 됩니다.

 

감사합니다.

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

 

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART)나 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 


오늘은 예전에도 겪었던 openpyxl 문제가 다시 발생하여 기록 및 공유 겸 짧게 글을 써보려 합니다.

 

파이썬으로 엑셀을 다루게 해주는 openpyxl 패키지는,

 

시트(sheet)에 존재하는 값이 입력된 가장 마지막 열을 파악해야 할 때, ws.max_row를,

마지막 열이 정확히 어디인지 모르지만 전체 열을 범위로 넣고 싶을 때ws.rows를 사용합니다.

 

그런데 이때 가끔씩 빈 공간을 마치 값이 입력된 것처럼 인식할 때가 있습니다. 없는데 있는 그런 모순된 상황입니다.

 

결론부터 말씀드리면 무엇인가 썼다가 지웠거나, 셀 서식이 들어가 있으면 해당 셀 공간이 빈공간이 아닌 것 처럼 인식합니다.

 

해결 방법은 아래에서 설명드리겠습니다.

 

1. 문제 현상

 

자, 아래에서 예시를 통해서 좀 더 자세히 보여드리겠습니다.

 

아래의 그림을 보시면, 6번행까지 값이 입력되어 있습니다. 단, 7,8,9번행까지 제가 다른 것을 썼다가 지운 상태입니다.

 

테스트용 출석부.xlsx

 

간단한 코드로 ws.rows가 어떻게 사용되고 작동하는지 살펴보겠습니다. 의도한 출력결과는 값이 입력된 마지막 행을 파악하고 그 전의 행들을 모두 출력하는 것입니다. 참고로 여기서 출력하는 것은 값이 아니라 Cell 객체입니다.

 

import  openpyxl

# "출석부.xlsx"라는 이름의 엑셀파일 불러오기
wb = openpyxl.load_workbook("출석부.xlsx")

# 불러운 엑셀파일에서 "1반"이라는 이름을 가진 sheet 가져오기
ws = wb["1반"]

# ws.rows로 가장 마지막 행을 파악, 행을 한줄씩 출력
for  row  in  ws.rows:
    print(row)

 

<정상적인 실행 결과>

 

<잘못된 실행 결과>

 

분명히 아무것도 존재하지 않는데 9번 행을 시트의 마지막 행으로 잡았습니다.

 

 

2. 해결 방법

 

해결 방법은 간단합니다.

 

주변의 진짜 순수한(?) 떼뭍지 않은(?) 셀을 잘라내기해서 문제가 되는 영역에 붙여넣는 것입니다.

 

 


누군가에게 도움이 되었길 기대하며 글을 마칩니다.

 

 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

 

오늘은 파이썬으로 엑셀(Excel)을 다룰 때 가장 많이 사용하는 openpyxl 패키지에 대해 알아보겠습니다.

엑셀은 회사에서 업무할 때 정말 많이 사용하는 오피스 프로그램이니 알아두시면 많은 도움이 되실거라 생각합니다!

 

지난 시간에 배운 내용과 관련된 코드는 설명없이 넘어 갈 예정이니, 아래 내용을 모르신다면 읽고 오시는 것을 추천드립니다.

 

<openpyxl 관련 글>

 

2021.05.28 - [파이썬 패키지/사무자동화] - [Python Excel] 파이썬으로 엑셀 다루기 1편_openpyxl 패키지 소개 및 시트 생성/변경

2021.05.29 - [파이썬 패키지/사무자동화] - [Python Excel] 파이썬으로 엑셀 다루기 2편_엑셀 파일 불러오기, 셀 데이터 입력/삭제 및 빈칸 추가

2021.05.30 - [파이썬 패키지/사무자동화] - [Python Excel] 파이썬으로 엑셀 다루기 3편_셀 데이터 가져오기

2021.05.31 - [파이썬 패키지/사무자동화] - [Python Excel] 파이썬으로 엑셀 다루기 4편_셀 서식 설정(맞춤, 글꼴, 테두리, 채우기, 보호)

 

 

<win32com 모듈 관련 글>

 

2021.12.12 - [파이썬 패키지/엑셀] - [파이썬 엑셀/PyWin32] 개별 엑셀 파일의 특정 시트들을 새로운 엑셀 파일에 모두 합치기 (ft. Openpyxl로는 못함)

2021.12.12 - [파이썬 패키지/엑셀] - [파이썬 엑셀/PyWin32] 엑셀 시트를 각각 분리해서 엑셀 파일로 저장하기

2021.12.14 - [파이썬 패키지/엑셀] - [파이썬 엑셀/PyWin32] 개별 폴더에 위치하는 엑셀 파일의 특정 시트들을 새로운 엑셀 파일에 모두 합치기 (ft. Tkinter를 이용한 폴더 선택 기능 추가)

 

 


 

엑셀을 사용하시면 보통 함수(SUM, AVERAGE, COUNT, COUNTIF, IF, VLOOKUP 등등)를 사용하게 됩니다. 수식(함수)을 사용하지 않으면 엑셀의 10% 밖에 사용하지 않는다고 생각될 정도로 중요하다고 생각합니다.

 

그래서 오늘은  이런 수식을 openpyxl에서 어떻게 다룰 수 있는지 알아보겠습니다.

 

1. 수식 적용

 

엑셀에는 정말 다양한 수식이 있지만 아주 간단한 SUM, AVERAGE 함수로 적용하는 법만 알아보겠습니다.

 

정말 쉽습니다. ""(쌍따옴표)를 이용해서 적용하고자 하는 수식을 문자열로 셀에 입력해주면 됩니다.

 

주로 데이터가 입력된 셀의 값을 참조해서 수식 적용하는 경우가 많으니 아래의 두 가지 방법 중 두 번째 것을 기억해주세요.

 

from openpyxl import Workbook

wb = Workbook()
ws = wb.active

ws["A1"] = "=SUM(5, 10, 15)" 
ws["A2"] = "=AVERAGE(5, 2, 3)"

# 주로 데이터가 입력된 셀의 값을 참조해서 수식 적용

ws["A3"] = 20
ws["A4"] = 30
ws["A5"] = "=SUM(A3:A4)" # 50

wb.save("formula.xlsx")

 

다음 내용을 진행하기 위해서 꼭 위의 코드를 실행해주시고, 엑셀 파일은 다음 실습을 위해서 확인하지 말거나 복사본을 만들어서 복사본을 확인 해주세요!

 

만들어진 엑셀 파일은 아래와 같이 수식이 들어가서 그 결과가 셀에 들어가 있는 것을 확인할 수 있습니다.

 

 

 

2. 수식 적용된 셀의 데이터를 가져오기

 

수식이 들어간 셀을 파이썬에서 다루려면 data_only를 알고 계셔야 합니다. 이게 무슨 말인지 차근차근 설명드려보겠습니다.

 

아래의 코드는 방금 만든 엑셀 파일(formula.xlsx)의 데이터들을 파이썬 터미널에서 확인하는 코드입니다. 

 

from openpyxl import load_workbook

wb = load_workbook("formula.xlsx")
ws = wb.active

for row in ws.values:
    for cell in row:
        print(cell)

 

 

실행해보시면 아래와 같이 수식이 그대로 출력됩니다.

 

<실행 결과>

=SUM(5, 10, 15)
=AVERAGE(5, 2, 3)
20
30
=SUM(A3:A4)

 

만약 파이썬으로 수식으로 처리된 값을 사용해서 다른 계산을 하고싶은데 이렇게 출력되면 불가능하겠죠?

 

그래서 우리는 wb = load_workbook( )로 엑셀 파일을 불러올 때 data_only 설정을 하는 법을 알아둬야 합니다.

 

결론부터 말씀드리면 아래와 같이 data_only=True라는 설정을 추가해주시면 됩니다.

wb = load_workbook("formula.xlsx", data_only=True)

 

방금 전 실행했던 코드에 data_only 설정을 해서 실행하면 아래와 같은 결과가 나옵니다.

<실행 결과>

None
None
20
30
None

 

의도했던 결과와 다르게 수식이 들어가 있던 셀의 값들이 None으로 출력됩니다. 당황하지 마시고 "fomula.xlsx"를 한 번 열어서 저장해준 후에 다시 코드를 돌려보세요. 아마도 값이 정상적으로 나오는 것을 확인하실 수 있을거에요.

 

<실행 결과>

30
3.3333333333333335
20
30
50

 

앞으로도 파이썬을 통해 수식이 포함된 엑셀 파일을 만들었다면 한 번 직접 열어서 저장해주어야 의도한 엑셀 파일이 완성된다고 생각해두면 None이 떠서 당황하는 상황이 발생하지 않을 것 같네요!

 

 

<여기서 잠깐> load_workbook( ) 제대로 쓰기

 

우리가 엑셀 파일을 불러오기 위해서 사용해왔던 load_workbook( ) 함수는 사실 여러가지 설정(정확히는 매개 변수)이 있습니다.

 

(function) load_workbook: (filename, read_only=False, keep_vba=KEEP_VBA, 
			   data_only=False, keep_links=True) -> Workbook

 

1) filename

가장 첫 설정은 파일 이름입니다. 지금까지 배워왔 듯이 "엑셀 파일명.xlsx"와 같이 써주시면 됩니다.

 

2) read_only

읽기 전용 모드로 편집이 불가능한 대신, 데이터가 많아지면 버벅거리는 엑셀 파일을 비교적 가볍게 참조할 수 있습니다.

따로 설정하지 않으시면 기본적으로 False 값이 들어가 있어서 일반 모드로 불러옵니다.

 

3) keep_vba

vba는 간단히 말해 액셀 안의 매크로 프로그램입니다. keep_vba 기능은 해당 엑셀 파일에 존재하는 vba 파일을 보존해주는 설정이며, 기본적으로 KEEP_VBA 설정이 켜져 있습니다. 만약 vba를 불러오지 않아야 하는 상황이면, keep_vba = False를 넣어주시면 됩니다.

 

4) data_only

셀 안에 수식이 있다면 수식이 계산된 결과값을 가져오는 설정입니다. 이 설정도 기본값이 False로 들어가 있어, 사용하고 싶다면 data_only = True를 넣어 주어야 합니다.

 

5) keep_links

함수의 설명을 보면 외부 통합 문서에 대한 링크를 보존해야하는지에 대한 여부를 설정하는 것이라 합니다. 저는 엑셀과 친하지 않아서 무슨 말인지 잘 모르겠으니 맘편하게 기본값인 True로 사용하겠습니다. 참고로 기본값이란 함수를 사용할 때 별도로 값을 넣어주지 않아도 적용되는 값을 말합니다.

 


다음 시간에는 데이터를 가지고 차트를 만드는 법에 대해 공부해 보겠습니다.

 

감사합니다.

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

 

오늘은 파이썬으로 엑셀(Excel)을 다룰 때 가장 많이 사용하는 openpyxl 패키지에 대해 알아보겠습니다.

엑셀은 회사에서 업무할 때 정말 많이 사용하는 오피스 프로그램이니 알아두시면 많은 도움이 되실거라 생각합니다!

 

지난 시간에 배운 내용과 관련된 코드는 설명없이 넘어 갈 예정이니, 아래 내용을 모르신다면 읽고 오시는 것을 추천드립니다.

 

2021.05.28 - [파이썬 패키지/사무자동화] - [Python Excel] 파이썬으로 엑셀 다루기 1편_openpyxl 패키지 소개 및 시트 생성/변경

2021.05.29 - [파이썬 패키지/사무자동화] - [Python Excel] 파이썬으로 엑셀 다루기 2편_엑셀 파일 불러오기, 셀 데이터 입력/삭제 및 빈칸 추가

2021.05.30 - [파이썬 패키지/사무자동화] - [Python Excel] 파이썬으로 엑셀 다루기 3편_셀 데이터 가져오기

 


 

이번 시간에는 셀에 여러가지 스타일을 적용하는 방법을 배워보겠습니다.

 

셀 스타일 설정을 위해서는 openpyxl.styles 모듈을 불러와줘야합니다.

 

from openpyxl import Workbook
from openpyxl.styles import Font, Border, Side, Alignment, PatternFill, Protection

 

설정 요소는 크게 5종류로 나뉩니다. Font(글꼴), Border(테두리), Alignment(맞춤), PatternFill(채우기), Protection(보호)

 

하나씩 차례대로 알아보겠습니다.

 

 

1. Font (글꼴)

 

우리가 엑셀을 사용할 때 가장 흔하게 설정하는 글꼴입니다. 글자체, 사이즈, 글자 스타일, 밑줄, 색상 등을 설정할 수 있습니다.

세부 설정 요소 설정 값 기본 값
name '폰트 이름(영어로)'       
ex) 'Arial', 'GungSeo'
'Calibri'
size 1~409 11
bold  /  italic  /  strike
(굵게) (기울임) (취소선)
True/False Fasle
underline
  (밑줄)
'none'/'single'/'double'
 (없음)   (한 줄)   (두 줄)
'none'
color '000000~FFFFFF' or '00000000~FFFFFFFF' 'FF000000'

 

혹시 아래에서 마음에 드는 컬러가 있으시면 참고해서 사용하세요.

출처. openpyxl 공식 문서

<사용 예>

a1 = ws.cell(row=1, column=1, value="파이썬은")
b1 = ws.cell(row=1, column=2, value="역시")
c1 = ws.cell(row=1, column=3, value="코딩유치원!")

a1.font = Font(color="FF0000", italic=True, bold=True) # 글자 색은 빨갛게, 이탤릭, 굴게 적용
b1.font = Font(color="0000FF", name="Arial", strike=True) # 폰트를 Arial로 설정, 취소선 적용
c1.font = Font(color="00FF00", size=15, underline="single") # 글자 크기를 15로 설정, 밑줄 적용

 

2. Border (테두리)

 

테두리의 위치(상하좌우)와 선 스타일을 설정할 수 있습니다. 자주 사용하는 것만 굵은 글씨로 표시해두었으니 참고해주세요.

세부 설정 요소 설정 값 기본 값
left / right / top / bottom

    vertical      /    horizontal
(좌우 모서리)      (상하 모서리)
     outline
(네 모서리 모두)
'dashDot' / 'dashDotDot' / 'dashed' / 'dotted' / 
'double' / 'hair' / 'medium' / 'mediumDashDot' / 'mediumDashDotDot' / 'mediumDashed' / 'slantDashDot' / 'thick' / 'thin'
None
diagonal (대각선) 위와 동일 None
diagonal_direction
(대각선 방향)
0 / 1 0

 

<사용 예>

a1 = ws.cell(row=1, column=1, value="코딩유치원")

thin_border = Border(left=Side(style="thin"), right=Side(style="thin"), 
		top=Side(style="thin"), bottom=Side(style="thin"))
        
a1.border = thin_border

 

 

3. Alignment (맞춤)

 

아마 맞춤 기능은 가운데 정렬할 때 가장 많이 사용하지 않나 싶습니다. 그 외에도 많은 기능이 있지만 아직 필요성을 못느껴서 추후 필요시 공부하여 업데이트 예정입니다.

세부 설정 요소 설정 값 기본 값
horizontal (수평 정렬) "general" / "left""center""right" /
"fill" / "justify" / "centerContinuous" / "distributed"
None
vertical (수직 정렬) "top""center""bottom" / "justify" / "distributed"
None
indent, relativeIndent 0 이상의 정수 0
<그 외 요소들>

1) 텍스트 회전
textRotation / text_rotation

2) 자동 줄바꿈
wrapText / wrap_text

3) 줄여 맞추기
shrinkToFit / shrink_to_fit

4) 기타 등등
readingOrder / justifyLastLine /
mergeCell
추후 필요시 공부하여 업데이트 예정 1) 0 / None

2) None / None

3) None / None

4) 0 / None / None

 

<사용 예>

cell.alignment = Alignment(horizontal="center", vertical="center")

 

 

4. PatternFill (채우기)

채우기는 표의 제목이나 특별히 강조할 곳을 표시할 때 사용합니다. 아마 Solid 패턴으로 배경색만 설정해서 사용하지 않을까 생각됩니다.

세부 설정 요소 설정 값 기본 값
patternType PatternFill( )  /   GradientFill( ) 사용 예 참고
fill_type 'solid' / 'darkDown' / 'darkGray'/ 'darkGrid' /
'darkHorizontal' / 'darkTrellis' / 'darkUp' /
'darkVertical' / 'gray0625' / 'gray125' /
'lightDown' / 'lightGray' / 'lightGrid' /
'lightHorizontal' / 'lightTrellis' / 'lightUp' / 
'lightVertical' / 'mediumGray'
None
fgColor (배경색) '000000~FFFFFF' or '00000000~FFFFFFFF' 000000(검정색)
bgColor (패턴색) '000000~FFFFFF' or '00000000~FFFFFFFF' 000000(검정색)
start_color / end_color
(그라데이션)
'000000~FFFFFF' or '00000000~FFFFFFFF' None

 

<사용 예>

# 배경을 빨간색으로 설정
cell.fill = PatternFill(fgColor="FF0000", fill_type="solid")

# 그라데이션 배경 넣는 법 (start_color, end_color)
cell.fill = GradientFill(stop=("000000", "FFFFFF"))

 

 

5. Protection (보호)

 

통합 문서나 시트를 수정하지 못하도록 보호하는 설정으로 보입니다만 제가 엑셀을 잘 몰라서 이런 것이 있다는 것 정도만 언급하고 넘어가도록 하겠습니다.

protection = Protection(locked=True, hidden=False)

 


오늘은 openpyxl을 이용하여 엑셀 서식(style)을 변경하는 법에 대해 알아보았습니다.

 

다음 시간에는 수식을 사용하는 법에 대해 공부해보겠습니다.

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

 

오늘은 파이썬으로 엑셀(Excel)을 다룰 때 가장 많이 사용하는 openpyxl 패키지에 대해 알아보겠습니다.

엑셀은 회사에서 업무할 때 정말 많이 사용하는 오피스 프로그램이니 알아두시면 많은 도움이 되실거라 생각합니다!

 

지난 시간에 배운 내용과 관련된 코드는 설명없이 넘어 갈 예정이니, 아래 내용을 모르신다면 읽고 오시는 것을 추천드립니다.

 

2021.05.28 - [파이썬 패키지/사무자동화] - [Python Excel] 파이썬으로 엑셀 다루기 1편_openpyxl 패키지 소개 및 시트 생성/변경

2021.05.29 - [파이썬 패키지/사무자동화] - [Python Excel] 파이썬으로 엑셀 다루기 2편_엑셀 파일 불러오기, 셀 데이터 입력/삭제 및 빈칸 추가

 


 

1. 셀 단위 가져오기

 

만약 B1 셀의 데이터만 가져오려면 두 가지 방법으로 가능합니다.

 

1) ws['B1'].value

2) ws.cell(row=1, column=2).value

 

참고로 .value를 붙여주지 않으면 <Cell '시트명'.B1> 와 같은 형식으로 값을 리턴합니다.

 

먼저 지난 시간에 배웠던대로 개별 셀에 데이터를 입력해보겠습니다.

# A4와 B1 셀에 데이터 입력
ws['A4'] = 10
ws.cell(row=1, column=2, value=15)

 

그럼 현재는 이런 상태이겠죠?

이제 이 값들을 가져와 보겠습니다.

 

<엑셀 포맷(알파벳+숫자)의 인덱싱 방식>


# 해당 위치의 데이터 확인
a = ws['A4']
print(a)
>>> <Cell '시트명'.A4>

b = ws['A4'].value
print(b)
>>> 10

 

<openpyxl 포멧(숫자, 숫자)의 인덱싱 방식>

c = ws.cell(row=1, column=2)
print(c)
>>> <Cell '시트명'.B1>

d = ws.cell(row=1, column=2).value
print(d)
>>> 10

 

직관적인 면에서는 'A4'와 같은 인덱싱 방법이 더 편하지만, 나중에 for문에서 row나 column을 변환시키면서 코딩해야할 때는 ws.cell( ) 방식을 사용해야만 하는 경우가 있답니다.

 

대략 이런 경우에 말이죠.

for x in range(1,101):
	for y in range(1,101):
		ws.cell(row=x, column=y)

 

2. 범위로 가져오기

 

당연히 범위로도 셀 값을 가져올 수 있습니다.

 

<엑셀 포맷(알파벳+숫자)의 인덱싱 방식>

# A1:B4 범위의 셀 정보 가져오기
cell_range = ws['A1:B4']

# 가져온 cell_range(이차원 튜플)의 내용 하나씩 print
for i in cell_range:
    for j in i:
        print(j.value)
        
>>> 
None
15
None
None
None
None
10
None

 

<openpyxl 포멧(숫자, 숫자)의 인덱싱 방식>

 

iter_rows( ) 혹은 iter_cols( ) 함수로 행/열의 최소 최대를 입력해줌으로써 범위 내의 데이터를 가져올 수 있습니다.

 

아래의 코드를 보시고 두 함수가 값을 가져오는 순서 차이를 이해하고 넘어가시는 걸 추천드립니다.

(순서 차이를 위해서 cell을 print했으며, cell.value를 입력해주면 cell 안의 값을 출력합니다)

# 행 단위로 가져옴
for row in ws.iter_rows(min_row=1, max_row=4, min_col=1, max_col=2):
    for cell in row:
	    print(cell)
>>> 
<Cell 'Sheet1'.A1>
<Cell 'Sheet1'.B1>
<Cell 'Sheet1'.A2>
<Cell 'Sheet1'.B2>
<Cell 'Sheet1'.A3>
<Cell 'Sheet1'.B3>
<Cell 'Sheet1'.A4>
<Cell 'Sheet1'.B4>


# 열 단위로 가져옴
for col in ws.iter_cols(min_row=1, max_row=4, min_col=1, max_col=2):
	for cell in col:
		print(cell)
>>> 
<Cell 'Sheet1'.A1>
<Cell 'Sheet1'.A2>
<Cell 'Sheet1'.A3>
<Cell 'Sheet1'.A4>
<Cell 'Sheet1'.B1>
<Cell 'Sheet1'.B2>
<Cell 'Sheet1'.B3>
<Cell 'Sheet1'.B4>

 

3. 행/열 단위 가져오기

 

셀을 행이나 열 단위로 가져오는 것도 가능합니다. 방금 전 위에서 배웠던 범위와 같은 방식입니다.

다만 인덱싱을 2차원이 아닌 1차원(only 행 or only 열)로 입력해주는 것만 다를 뿐이죠.

 

<엑셀 포맷(알파벳+숫자)의 인덱싱 방식>

# 열 하나 가져오기
col_C = ws['C']
for cell in col_C:
	print(cell.value)

# 열 여러개 가져오기
col_range = ws['B:C']
for cols in col_range:
    for cell in cols:
        print(cell.value)

# 행 하나 가져오기 (for 문 생략_위와 동일)
row10 = ws[10]

# 행 여러개 가져오기 (for 문 생략_위와 동일)
row_range = ws[5:10]

 

<openpyxl 포멧(숫자, 숫자)의 인덱싱 방식>

 

위에서 배웠던 iter_rows( ), iter_cols( ) 함수에서 행이나 열의 max값을 생략해주면 됩니다.

여기서는 자세한 내용을 생략하고 좀 더 자주 사용할만한 개념을 소개드리겠습니다.  

 

만약 범위를 지정하기보다 모든 행이나 열을 참조해야하는 경우는 ws.row나 ws.columns를 사용할 수 있습니다.

이 개념은 계속 데이터가 추가되어서 최대 범위가 계속 바뀔 때 유용하게 사용할 수 있답니다. 

 

ws = wb.active
ws['C9'] = 'hello world'

tuple(ws.rows)

>>> 
((<Cell Sheet.A1>, <Cell Sheet.B1>, <Cell Sheet.C1>),
(<Cell Sheet.A2>, <Cell Sheet.B2>, <Cell Sheet.C2>),
(<Cell Sheet.A3>, <Cell Sheet.B3>, <Cell Sheet.C3>),
(<Cell Sheet.A4>, <Cell Sheet.B4>, <Cell Sheet.C4>),
(<Cell Sheet.A5>, <Cell Sheet.B5>, <Cell Sheet.C5>),
(<Cell Sheet.A6>, <Cell Sheet.B6>, <Cell Sheet.C6>),
(<Cell Sheet.A7>, <Cell Sheet.B7>, <Cell Sheet.C7>),
(<Cell Sheet.A8>, <Cell Sheet.B8>, <Cell Sheet.C8>),
(<Cell Sheet.A9>, <Cell Sheet.B9>, <Cell Sheet.C9>))


tuple(ws.columns)

>>> 
((<Cell Sheet.A1>,
<Cell Sheet.A2>,
<Cell Sheet.A3>,
<Cell Sheet.A4>,
<Cell Sheet.A5>,
<Cell Sheet.A6>,
...
<Cell Sheet.B7>,
<Cell Sheet.B8>,
<Cell Sheet.B9>),
(<Cell Sheet.C1>,
<Cell Sheet.C2>,
<Cell Sheet.C3>,
<Cell Sheet.C4>,
<Cell Sheet.C5>,
<Cell Sheet.C6>,
<Cell Sheet.C7>,
<Cell Sheet.C8>,
<Cell Sheet.C9>))

 

오늘 준비한 내용은 여기까지입니다.

 

공부하시느라 고생 많으셨습니다.

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

 

오늘은 파이썬으로 엑셀(Excel)을 다룰 때 가장 많이 사용하는 openpyxl 패키지에 대해 알아보겠습니다.

엑셀은 회사에서 업무할 때 정말 많이 사용하는 오피스 프로그램이니 알아두시면 많은 도움이 되실거라 생각합니다!

 

지난 시간에 배운 내용과 관련된 코드는 설명없이 넘어 갈 예정이니, 아래 내용을 모르신다면 읽고 오시는 것을 추천드립니다.

 

2021.05.28 - [파이썬 패키지/사무자동화] - [Python Excel] 파이썬으로 엑셀 다루기 1편_openpyxl 패키지 소개 및 시트 생성/변경

 

 


 

1. 엑셀 파일 불러오기

 

보통 엑셀을 처음부터 만들기 보다는 만들어진 엑셀 파일을 불러와서 사용하는 경우가 많을 텐데요. 

그래서 지난 시간 저장했던 "test.xlsx" 파일 불러오는 코드를 통해 엑셀 파일 불러오는법을 배워보겠습니다.

 

from openpyxl import load_workbook

wb = load_workbook("test.xlsx")

ws = wb["First Sheet"]

 

먼저 openpyxl 패키지의 새로운 모듈을 불러와 줘야합니다. 지난 시간 사용했던 Workbook이 새 엑셀 파일을 만드는 모듈이라면, load_workbook은 엑셀 파일을 불러오는 모듈입니다.

 

불러온 후 wb["시트명"]으로 사용할 시트를 지정해주어야 시트의 셀들을 다룰 수 있으니 꼭 잊지 말아주세요.

 

 

2. 셀 입력

 

엑셀의 칸 하나를 셀(cell)이라 하고, 수 많은 셀로 이루어 져있습니다. 사람이 셀에 데이터를 입력해주려면 마우스로 원하는 셀을 찍고 입력하면 되지만, 컴퓨터는 불가능합니다. 그래서 행(row)과 열(column)로 이루어진 엑셀을 인덱싱(indexing)을 통해 원하는 좌표를 지정하고 데이터를 입력해 주어야 하죠.

 

 

셀을 인덱싱 하는 방법은 위와 같이 두 가지 방법이 있으며, for문을 사용해서 데이터를 입력하는 경우가 종종 있으니, cell( ) 함수를 이용하는 방법에 익숙해지시는게 좋을 듯 합니다.

 

# A1 셀에 값 입력
ws["A1"] = 5

# B1 셀에 값 입력 (추천하는 방법)
ws.cell(row=1, column=2, value=70)

# 이렇게도 가능합니다
ws.cell(1, 2, value=70)

 

 

3. 셀 삭제 (Delete)

 

셀에 데이터를 입력하는 것을 배웠으니, 삭제하는 방법도 배워보겠습니다.

사실 셀 삭제는 입력을 다시 하면서 아무 값도 넣어 주지 않으면 됩니다. 이렇게 말이죠.

 

ws["A1"] = ""

 

다음으로는 행과 열 단위로 삭제하거나 범위로 셀을 삭제하는 방법을 알아보겠습니다.

 

1) 행 삭제

# 1번행 1개 삭제
ws.delete_rows(1)

# 1번행부터 총 3개의 행 삭제 (1,2,3행 삭제)
ws.delete_rows(1, 3)

 

2) 열 삭제

# 3번열 1개 삭제
ws.delete_cols(3)

# 3번열부터 총 3개의 열 삭제 (3,4,5열 삭제)
ws.delete_cols(3, 3)

 

 

4. 셀 공백 추가 (Insert)

 

데이터들 사이에 공백을 추가하고, 새로운 데이터를 입력해야 하는 경우가 있죠? 엑셀의 행 삽입, 열 삽입 같은 기능말입니다.

 

위에서 배웠던 셀 삭제 함수의 delete가 insert로 바뀌었을 뿐 그 개념은 같습니다.

 

1) 빈행 추가

# 2번행에 빈행 삽입
ws.insert_rows(2)

# 1번행부터 총 3개의 빈행 삽입
ws.insert_rows(1, 3)

 

2) 빈열 추가

# 3번열에 빈열 삽입
ws.insert_cols(3)

# 3번열부터 총 3개의 빈열 삽입
ws.insert_cols(3, 3)

 

5. 단일 셀, 셀 범위 이동 (Ctrl+X 후 Ctrl+V)

 

입력된 내용을 그대로 다른 곳으로 이동시켜야 하는 경우는 아래의 함수를 이용합니다.

엑셀에서 마우스로 원하는 범위를 지정 후, 잘라내기 후 원하는 위치에 붙여넣기 하는 개념과 같습니다.

 

#D1 셀의 내용을 오른쪽으로 1열 이동시킴
ws.move_range("D1", cols=2)


#D4부터 F10 영역의 데이터를 위쪽으로 1행, 오른쪽으로 2열 이동시킴
ws.move_range("D4:F10", rows=-1, cols=2)

 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

 

 

오늘은 파이썬으로 엑셀(Excel)을 다룰 때 가장 많이 사용하는 openpyxl 패키지에 대해 알아보겠습니다.

엑셀은 회사에서 업무할 때 정말 많이 사용하는 오피스 프로그램이니 알아두시면 많은 도움이 되실거라 생각합니다!

 

아래의 실습코드를 가지고 설명드릴테니 차근차근 따라해주세요.

 

from openpyxl import Workbook

wb = Workbook()

ws = wb.active
ws_new = wb.create_sheet()

ws.title = "First Sheet"
ws_new.title = "New Sheet"

#ws_want = wb.create_sheet()

ws_want = wb.create_sheet("Third sheet", 1)

ws.sheet_properties.tabColor = "f4566e"

wb.save("test.xlsx")

 


 

1. 설치

 

오리지널 파이썬 사용자는 터미널(cmd) 창에 pip install openpyxl라고 입력해주시면 됩니다.

아나콘다 배포판 파이썬 사용자시라면 이미 설치되어 있으니 바로 다음 단계로 넘어가시면 되겠습니다.

 

 

2. openpyxl 패키지 불러오기

 

파이썬 파일을 하나 생성하시고, 아래의 코드를 입력해줍니다.

 

from openpyxl import Workbook

 

 

3. 엑셀파일 생성 및 저장

 

엑셀 파일을 한장 혹은 여러장의 sheet로 만들어진 book이라 생각하시면 됩니다.

Workbook( ) 클래스의 인스턴스를 wb라는 이름으로 생성하는 코드이며, 통상적으로 work book를 줄여서 wb라고 이름 지어줍니다.

 

wb = Workbook( )

 

가장 처음 Workbook을 만들면 자동으로 Sheet 하나가 만들어진 상태입니다.

 

만들어진 Workbook(엑셀)의 현재 상태

 

생성한 엑셀 파일은 save 함수를 통해 저장해야만 확인 가능합니다. save( )의 괄호 안에 "원하는 파일명.xlsx" 문자열을 입력 해주면 현재 파이썬 파일이 위치하는 폴더에 엑셀파일이 생성됩니다. 특별히 원하는 위치를 원하시면 절대 경로(디렉토리)를 입력해주세요.

wb.save("test.xlsx")

 

 

<가장 첫 시트 사용법>

 

가장 처음 만들어져있는 Sheet는 아래의 코드로 접근 가능합니다. wb.active는 가장 처음 만들어진 Sheet를 가리키며, ws는 worksheet의 줄임말입니다. 즉, 아래의 코드는 엑셀파일의 가장 첫 시트를 ws라는 변수로 선언해준다는 의미입니다.

 

ws = wb.active

 

 

4.  신규 엑셀시트 생성

 

새로운 시트를 추가하려면 아래의 코드를 추가해줍니다. 새로운 시트는 자동적으로 가장 마지막 탭으로 추가됩니다.

 

ws_new = wb.create_sheet()

 

엑셀 하단의 탭을 보시면 시트의 이름은 자동으로 Sheet1로 생성되는 것을 보실 수 있습니다.

 

새로운 시트 추가

 

5. 시트 이름 바꾸기

 

시트의 이름을 바꾸는 코드는 다음과 같습니다.

 

ws.title = "First Sheet"
ws_new.title = "New Sheet"

 

아래와 같이 시트의 이름이 바뀐 것을 확인할 수 있습니다.

 

 

 

여기서 잠깐!

 

<원하는 위치에 원하는 이름의 시트 생성하는 법>

 

위에서 배운 시트 생성 함수인 create_sheet( )는 사실 2가지 인수를 입력받을 수 있습니다. 바로 시트명생성 위치입니다.

 

ws_want = wb.create_sheet("Third sheet", 1)

 

시트명은 "Third sheet"과 같이 원하는 시트명을 문자열로 입력해주시면 되고, 생성 위치는 숫자 1를 넣어주면 두번째 sheet를 삽입하겠다는 뜻입니다. 리스트 인덱싱과 같은 개념으로 숫자 0이 첫번째, 숫자 1이 두번째 위치를 가리킵니다.

 

 

6. 시트 탭 색깔 바꾸기

 

시트의 수가 많을 때, 직관적으로 탭을 찾기 위해서 탭 색을 변경해주는 경우에 아래와 같이 사용가능합니다.

 

ws.sheet_properties.tabColor = "f4566e"

 

여기서 "ff66ff"는 헥스 코드라 부르며, Red, Green, Blue를 각각 2자리의 16진수로 표현해서 나타내는 방식입니다. RGB 빛의 3원색을 각각 0~256 사이로 조절하여 다양한 컬러를 구현 가능합니다.

 

출처. 나무위키 헥스 코드

 

<컬러 코드 참고 사이트>

 

https://www.w3schools.com/colors/colors_hexadecimal.asp

 

 

 

 

반응형

+ Recent posts