【Python×Excel操作】エクセルに画像を貼り付け・挿入する方法|OpenPyXL・作業自動化

こんにちは、Kosei(@kay_diacc2)です!

OpenPyXLによるExcel操作を取り扱ったPythonプログラミング記事です。本記事では「Excelファイルへの画像の挿入方法」ついて解説します。また、画像挿入前に検討すべき「画像のリサイズ処理」についても解説します。

目次

OpenPyXLを活用した画像貼り付け方法

はじめに、本記事で作成するExcelファイルの完成イメージを示します。続いて、画像添付に向けたプログラミング手順を示します。

画像挿入・完成イメージ

本記事のゴールは、上図のようにExcel上に画像を挿入することとします。ゴールまでのプログラミングプロセスは以下です。

  1. 挿入画像を準備
  2. 挿入画像を適したサイズで挿入できるようリサイズ
  3. Excelファイルを作成
  4. 画像をExcelファイルに挿入

事前準備

OpenpyXL

PythonによるExcel操作では、OpenPyXLというモジュールを用います。下記コマンドをもとに事前にインストールしておきましょう。

pip install openpyxl

PILLOW(PIL)

画像のリサイズでは、Pythonの画像処理ライブラリであるPillow(PIL)を用います。事前にをインストールしましょう。

pip install Pillow

挿入画像を適したサイズで挿入できるようリサイズ

それではここからプログラミングの解説に移ります。まず、適切な画像サイズでExcelファイルに挿入するために、PILを用いて画像リサイズ処理を実行します。下記2パターンのうちどちらかの方法で実行しましょう。

パターン1:特定のサイズを指定してリサイズ

こちらはリサイズする大きさを数値で指定する方法です。好きなサイズに変更できるのが特徴です。

from PIL import Image

#カレントディレクトリの画像指定
img_dir = '画像ファイル名.jpg'

#画像オブジェクト作成
img = Image.open(img_dir)

#リサイズ
img_resize = img.resize((300,200))  #()内の数値を変更することで好きなサイズでリサイズ可能

#リサイズした画像を上書き保存
img_resize.save(img_dir)

パターン2:画像の縦横比を保持しながらリサイズ

こちらはオリジナル画像の縦横比を保持しながらリサイズする方法です。画像の原型を保持できます。

from PIL import Image

#カレントディレクトリの画像指定
img_dir = '画像ファイル名.jpg'

#画像オブジェクト作成
img = Image.open(img_dir)

#オリジナル画像の幅・高さ確認
width, height = img.size
print("オリジナル画像の"+"幅: "+str(width),"高さ:"+str(height))

#リサイズ
w_shrink = 4  #縮小幅の割合指定
h_shrink = 4  #縮小高さの割合指定
img_resize = img.resize((int(width/w_shrink),int(height/h_shrink)))

#リサイズした画像の幅・高さ確認
width, height = img_resize.size
print("リサイズした画像の"+"幅: "+str(width),"高さ:"+str(height))

#リサイズした画像を上書き保存
img_resize.save(img_dir)

Excelファイルを作成

カレントディレクトリにExcelファイルを新規作成します。下記コードを実行します。

import openpyxl

#Excelファイル名
name = "画像貼り付け.xlsx"

#Excelファイル作成
workbook = openpyxl.Workbook(name)

#保存
workbook.save(name)

本記事では詳細を述べていないため、PythonによるExcelファイルの作成方法について詳しく知りたい方は下記の記事もご覧ください。

画像をExcelファイルに挿入

最後に画像をExcelファイルに挿入します。下記のようにコードを記載しましょう。

#Excelファイル読込
workbook = openpyxl.load_workbook(name)
sheet = workbook.active

#画像を選択
img_to_excel = openpyxl.drawing.image.Image(img_dir)

#指定の位置に画像を添付
sheet.add_image(img_to_excel, 'B3')

#保存
workbook.save(name)

リサイズした画像をExcelファイル上に挿入する作業はこれで全て完了です!

Pythonプログラミング・まとめ

本日取り扱ったコードは関数形式で下記に全量記載します。

from PIL import Image
import openpyxl
import os

""" (要編集) 引数を定義 """
#挿入する画像のディレクトリ
img_dir = '挿入する画像のディレクトリを指定'

#画像をリサイズする割合
w_shrink = 4   #幅
h_shrink = 4   #高さ

#Excelファイル名
ExcelName = "Excelファイル名.xlsx"

#画像を配置する位置
img_position = "F6"


#関数
def insert_img(img_dir,w_shrink,h_shrink,ExcelName,img_position):
    
    """ 01 画像リサイズ """
    #画像オブジェクト作成
    img = Image.open(img_dir)
    
    #オリジナル画像の幅・高さ確認
    width, height = img.size
    
    #リサイズ
    img_resize = img.resize((int(width/w_shrink),int(height/h_shrink)))
    
    #リサイズした画像を上書き保存
    img_resize.save(img_dir)

    """ 02 Excelファイル作成 """
    workbook = openpyxl.Workbook(ExcelName)
    workbook.save(ExcelName)


    """ 03 画像挿入 """
    #Excelファイル読込
    workbook = openpyxl.load_workbook(ExcelName)
    sheet = workbook.active

    #画像を選択 & 挿入
    img_to_excel = openpyxl.drawing.image.Image(img_dir)
    sheet.add_image(img_to_excel, img_position)

    #保存
    workbook.save(ExcelName)
    
    print("画像挿入完了: "+ str(os.path.basename(img_dir)))

「第一引数:挿入する画像のディレクトリ」、「第二引数:画像幅の縮小割合」、「第三引数:画像高さの縮小割合」、「第四引数:Excelファイル名」、「第五引数:画像の挿入位置」を渡すと実行できる関数です。

実行時は下記のように記載します。

insert_img(img_dir,w_shrink,h_shrink,ExcelName,img_position)

Excel×Pythonの自動化手法まとめ

本記事をご覧いただきありがとうございました!本記事ではExcel操作の自動化に役立つノウハウを多数配信しています。これからExcel作業の自動化に取り組みたい方向けには下記の記事が参考になるかと思います。是非ご覧ください!

PythonによるExcel自動操作を学習する上でのおすすめ教材もご紹介しています。

最後に

この記事が気に入ったら
フォローしてね!

本記事をシェア!
URLをコピーする
URLをコピーしました!
目次
閉じる