Openpyxlで Excelに画像を挿入する

2022年5月24日火曜日

Python

t f B! P L

Pythonで Excelを操作するためのライブラリの「Openpyxl」を使って、画像を Excel ファイルに挿入する方法を紹介します。

画像の用意

今回は、クマさんのイラスト画像を Excelに挿入してみましょう。
素材の配布元 から画像をダウンロードして任意の場所に保存します。

enter image description here

もちろん、別の画像でもかまいません。。。

Excel に画像を挿入するコード

Openpyxlで Excelに画像を挿入する Pythonのコードは、次のようになります。

import openpyxl
from openpyxl.drawing.image import Image

## ブックの新規作成
workbook = openpyxl.Workbook()
## 1シート目を取得
worksheet = workbook.worksheets[0]

## C2セルの左上を基準に画像を挿入
img = Image('/path/to/kuma.png')
worksheet.add_image(img, 'C2')

## ブックの保存
workbook.save("/path/to/image.xlsx")

上のコードを実行すると、こんな感じで Excel に画像が挿入されます。

enter image description here

サイズを指定して画像を挿入する

画像サイズを指定して挿入する場合は、次のコードのように、Image クラスの width および height プロパティを指定します。

import openpyxl
from openpyxl.drawing.image import Image

## ブックの新規作成
workbook = openpyxl.Workbook()
## 1シート目を取得
worksheet = workbook.worksheets[0]

## 画像ファイルの読み込み
img = Image('/path/to/kuma.png')

## Excelに挿入するときの画像サイズを指定
img.width = 150   
img.height = 150

## C2セルの左上を基準に画像を挿入
worksheet.add_image(img, 'C2')

## ブックの保存
workbook.save("/path/to/image.xlsx")

コードを実行して出力された Excelファイルを見ると、画像が縮小されているのが分かります。

enter image description here

アスペクト比(縦横比)を維持して画像を縮小する

アスペクト比(縦横比)が異なる、サイズが事前に不明の画像を縮小して Excel に挿入する場合、予めアスペクト比を計算しておいて、それを元に画像を縮小することで、画像が変に間延びしたりする問題を回避できます。

import openpyxl
from openpyxl.drawing.image import Image

## ブックの新規作成
workbook = openpyxl.Workbook()
## 1シート目を取得
worksheet = workbook.worksheets[0]

## 画像ファイルの読み込み
img = Image('/path/to/kuma.png')

## 画像のアスペクト比を計算
## イメージ読みこみ直後の height, widthには、オリジナルの画像サイズが入っている
a = img.height / img.width

## 横が300pxになるように、縦のサイズをアスペクト比に従い計算
img.width = 300   
img.height = int(300 * a)

## C2セルの左上を基準に画像を挿入
worksheet.add_image(img, 'C2')

## ブックの保存
workbook.save("/path/to/image.xlsx")

まとめ

Openpyxlで Excelに画像を挿入する方法を紹介してきました。

少ないコードでいろんな操作ができる Openpyxlは、やっぱり便利ですね。

スポンサーリンク
スポンサーリンク

このブログを検索

Profile

自分の写真
Webアプリエンジニア。 日々新しい技術を追い求めてブログでアウトプットしています。
プロフィール画像は、猫村ゆゆこ様に書いてもらいました。

仕事募集もしていたり、していなかったり。

QooQ