본문 바로가기

코딩/업무자동화

[파이썬/업무자동화] win32com.client 사용해서 엑셀 차트 다루기

반응형

* Win32com.client로 엑셀 다루기 포스팅

1편 : 2021.11.23 - [코딩/업무자동화] - [파이썬/업무자동화] win32com.client 사용해서 엑셀 사용하기 기초

2편 : 2021.12.14 - [코딩/업무자동화] - [파이썬/업무자동화] win32com.client 사용해서 엑셀 시트 다루기

3편 : 2021.12.22 - [코딩/업무자동화] - [파이썬/업무자동화] win32com.client 사용해서 엑셀 차트 다루기

4편 : 2021.12.30 - [코딩/업무자동화] - [파이썬/업무자동화] win32com.client 사용해서 엑셀 셀서식 지정하기

5편 : 2022.01.02 - [코딩/업무자동화] - [파이썬/업무자동화] win32com.client 사용해서 엑셀 영역 선택하는 방법 4가지 

6편 : 2022.01.17 - [코딩/업무자동화] - [파이썬/업무자동화] win32com.client 엑셀 파일 저장 및 옵션

 


  이번 포스팅에서는 win32com.client를 통해 엑셀 차트를 다루는 법 정리하려고 한다. 공부하다보니 Microsoft에서 제공하는 win32com(pywin32)나 엑셀 VBA 같은 언어에서 제공하는 메서드, 파라미터는 모두 동일하다. 즉, 엑셀 VBA를 할줄알면 파이썬 win32com.client도 쉽게 다룰 수 있다. 이 내용은 다음 포스팅에서도 정리해볼 예정이다.

 

 

1. import

 

import win32com.client

 

import하는 부분은 다른 글들과 동일한 부분이므로 생략

 

 

 

2. 엑셀 App 객체 생성

 

 

excel = win32com.client.Dispatch("Excel.Application") #엑셀 프로그램을 객체로 생성
excel.Visible = True #실행과정 보이게

 

 

3. 기존 있는 파일을 Workbook 객체로 생성, 활성화 된 시트를 객체로 생성

 

 

#기존 존재하는 data파일을 Workbook 객체로 생성
wb = excel.Workbooks.Open(r"C:\Users\Desktop\VS CODE\Project\17. win32com\chart_data.xlsx")

#활성화되어잇는 시트를 객체로 생성
ws = wb.ActiveSheet

 

 

참고로 "chart_data.xlsx"의 파일 데이터는 아래와 같음

 

"chart_data.xlsx"

 

 

4. 빈 차트 양식 생성

 

ws.Shapes.AddChart().Select() #차트를 새로 추가하고 선택

 

 

위와 같이 코드 작성하면 아래이미지처럼 빈 차트 양식 생성

 

 

 

 

 

 

5. 차트 Data 영역 설정

 

excel.ActiveChart.SetSourceData(Source=ws.Range("A1:B9"))

 

위 엑셀 데이터 중 "A1:B9" 영역을 데이터 영역으로 설정한다. 영역을 설정하면 아래와 같이 막대 차트가 생성 된다.

위 코드가 실행되기 위해서는 차트가 선택되어 있어야 한다. 위 코드에서 Select( )가 실행되어있으면 선택되어 있는 상태이다.

 

 

 

6. 차트 설정시 옵션

 

 

위 4번에서 다뤘던 AddChart( ) 메서드를 활용하면 차트 종류, 위치 등을 다양하게 설정 가능. 먼저 Microsoft에서 제공하는 Syntax를 확인.

 

아래 내용은 C# 구조이지만 같은 Microsoft에서 제공하는 라이브러리라 그런지 메서드의 파라미터 순서는 같음

(엑셀 VBA에서도 동일함)

 

 

 

1) 차트 종류 변경

 

 

chartType 은 아래 Microsoft Enumeration 문서에 옵션값을 다루고 있음.

https://docs.microsoft.com/en-us/previous-versions/office/developer/office-2010/ff838409(v=office.14) 

 

XlChartType Enumeration

XlChartType Enumeration Article 09/14/2015 2 minutes to read In this article --> Specifies the chart type. xl3DArea -4098 3D Area. xl3DAreaStacked 78 3D Stacked Area. xl3DAreaStacked100 79 100% Stacked Area. xl3DBarClustered 60 3D Clustered Bar. xl3DBarSta

docs.microsoft.com

 

 

 

 

위에서 생성했던 기본 막대 차트는 옵션 Value값이 4임. 만약 꺾은선으로 바꿔보려면 65로 수정하면 된다.

 

 

chart = ws.Shapes.AddChart(65).Select() #꺾은선 차트 생성
excel.ActiveChart.SetSourceData(Source=ws.Range("A1:B9")) #데이터 범위 설정

 

 

 

 

 

 

 

2) 차트 위치 및 크기

 

 

위 Syntax 문서에 따르면 AddChart(차트타입, 위치값(왼쪽 부터 offset), 위치값(위 부터offset), 가로크기, 세로크기)

임의로 코드를 작성해서 200*200 차트를 생성하면 

 

 

chart = ws.Shapes.AddChart(4,100,100,200,200).Select() #막대 차트 200*200 크기 생성
excel.ActiveChart.SetSourceData(Source=ws.Range("A1:B9")) #데이터 범위 설정

 

 

임의로 코드를 작성해서 200*200 차트를 생성하면 아래와 같은 결과 출력

 

 

 

 

 

7. 차트 제목 및 범례 설정

 

 

1) 제목 설정

 

 

excel.ActiveChart.HasTitle = True #차트 제목 나오게(False면 안보임)
excel.ActiveChart.Charttitle.Text = "국어 과목" #차트 제목 설정
excel.ActiveChart.Charttitle.Characters.Font.Size=14 #차트 제목 글씨 크기
excel.ActiveChart.Charttitle.Characters.Font.ColorIndex = 5 #차트 제목 색상(파란색)
excel.ActiveChart.Charttitle.Characters.Font.Bold=True #제목 굵게

 

 

 

 

2) 범례 설정

 

 

excel.ActiveChart.HasLegend = True #차트 범례 보이게(Fasle면 안보임)
excel.ActiveChart.Legend.Font.Size = 15 #차트 범례 글씨 크기
excel.ActiveChart.Legend.Font.Bold = True #차트 범례 굵게
excel.ActiveChart.Legend.Font.ColorIndex = 5 #차트 범례색상 설정(파란색)

 

 

 

728x90