OpenPyXlでPythonからExcelにグラフを挿入する方法【サンプルコード有り】

はじめに

前回の記事でOpenPyXlを使うことでExcelの内容をPythonで取得してJupyter Notebookに出力する方法をご説明しました。取得した内容をJupyter Notebookに出力しましたが、その他にもデータベースに入力したり、あるいは他のアプリケーションに渡すことでデータのやり取が自動化することが予想されます。

今回は、PythonでExcelの側にデータを出力する方法を考えます。これができるようになると、様々なデータを加工してExcelにわたすことができますし、またExcel同士でデータを共有することができるので、いちいち他のシートを開く手間も省けるのではないでしょうか。

また、取得した内容でグラフを作成し表示する方法も解説します。一連の作業がルーチンワークになっている場合、この作業をPythonとExcelで自動化することができれば大幅な時短になり、生産性も向上するでしょう!

OpenPyXlでPythonからExcelにグラフを挿入する本記事の目的

本記事では前回に引き続きOpyePyXlを用いてPythonからExcelを操作する方法をご紹介します。前回はExcelからデータを取り出す方法を紹介しましたが、今回はPythonにおけるリストと呼ばれるデータ形式からExcelの方に表を作成します。

作成した表をもとにグラフを作成します。グラフの作成にはopenpyxl.chartを用います。このchartオブジェクトは様々なグラフを描画する事ができます。英語ですがリファレンスをご覧になると、通常使用するグラフはほぼ全て網羅されていることがわかるでしょう。

Pythonの代表的なデータ形式であるリスト型の運用方法と、.chartオブジェクトの使い方をマスターして日々の作業の自動化を図ってください。

OpenPyXlでPythonからExcelにグラフを挿入する処理の流れ

それでは処理の流れをご説明します!

リスト型にデータを挿入する

まずリスト型に今回使いたいデータを挿入します。

今回は同一プログラムの中でデータを宣言する形となりましたが、本来はデータが他のプログラムから与えられていることのほうが多いでしょう。例えばスクレイピングしてきたデータや、他のExcelから取得してきたデータはリスト型になった状態で与えられていることが多いと思います。そうした場合は与えられたリスト型のデータ形式に注意してプログラムに取り込む必要があります。

openpyxl.chartをインポートしてグラフ表示の準備をする

前述のopenpyxl.chartのインポートを宣言します。この宣言をしてchartオブジェクトを作成することでグラフの表示が可能になります。

chartオブジェクトにデータを挿入し、見出しを設定する

作成したchartオブジェクトにデータを挿入します。forループを使ってリスト型のデータを挿入しています。また、グラフの見出しを設定しています。

chartオブジェクトをExcelの指定の場所に描画し、Excelブックを保存する

今回はE1に左上が来るようにグラフを描画しました。最後に.saveでブックを保存しないと、変更が全く記録されないのでご注意ください。

OpenPyXlでPythonからExcelにグラフを挿入するサンプルコード

それではサンプルコードです

# 果物名
fruits = ['りんご', 'みかん', 'ぶどう', 'めろん', 'すいか', 'なし']

# 月名
months = ['Apr', 'May', 'Jun']

# 注文件数
apr = [5, 10, 15, 20, 35, 25]  
may = [20, 10, 10, 17, 18, 10]
jun = [15, 15, 5, 20, 25, 30]


import openpyxl as pyxl
from openpyxl.chart import BarChart, Reference

mywb = pyxl.Workbook()


mybr = mywb.active


mybr.append(months)


mybr.insert_cols(1)


for i in range(len(fruits)):
  mybr.append([drinks[i], apr[i], may[i], jun[i]])


mych = BarChart()
mych.type = 'col'


mych.title = '自動化果樹園注文数'
mych.x_axis.title = '果物名'
mych.y_axis.title = '注文件数'


data = Reference(mybr, min_col=2, min_row=1, max_col=4, max_row=7)


mych.add_data(data, titles_from_data=True)


ctgrs = Reference(mybr, min_col=1, min_row=2, max_row=7) 
mych.set_categories(ctgrs)


mybr.add_chart(mych, "E1")

mywb.save('charttest.xlsx') 

おわりに

今回はOpenPyXlをつかって、Pythonのリスト型データをExcelに挿入する方法と、そのデータをもとにグラフを作成して描画する方法をご紹介しました。OpenPyXlの奥深さをご理解いただけたのではないでしょうか?

Pythonには非常に沢山のモジュールが有り、あまり知られていないけどものすごく役に立つものが結構あります。OpenPyXlはその一つでPythonからExcelを操作してほぼなんでもできるという優秀なモジュールです。

しかし、Excelの扱いのみがPythonの本領では有りません。また、データは一般的にはExcelなどで管理している会社がほとんどでしょうが、データベースなどと連携させることで本格的なデータ運用が可能となります。こうしたPythonのさらなる可能性について、今後さらに研究していきたいと思います。