概要
matplotlibで生成したグラフをエクセルに出力する時、自分のローカルにグラフ画像を保存せずにそのままエクセルに出力したい事があると思います。
今回は「既存のエクセルファイルに新しいタブを追加し、そこにグラフを出力する」という場面を想定し、上記を実現するコードを書いていこうと思います。
サンプルコード
import io
import openpyxl
import matplotlib.pyplot as plt
fig = plt.figure()
# ~~~~~~ グラフを作っていく処理は省略 ~~~~~~~~
# 既存のエクセルファイルを開き、「chart」という名前のタブを追加する
file = 'path/to/excel.xlsx'
workbook = openpyxl.load_workbook(file)
new_sheet = workbook.create_sheet('chart')
# PCのメモリに画像を保存する
img_data = io.BytesIO()
fig.savefig(img_data, format='png')
# 表示するための画像を生成し、エクセルに出力する
img = openpyxl.drawing.image.Image(img_data)
new_sheet.add_image(img, 'G1')
# 変更を保存
workbook.save(file)
まとめ
これで作成したグラフがエクセルの新しいタブに表示されるはずです。
ローカルに不必要なデータが生成されなくていいですね。