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

こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!

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

目次

【Python×Excel】OpenPyXLでエクセルに画像貼り付ける|全体像

本記事では、PythonのOpenPyXLというライブラリを活用して、Excelファイルを操作し、画像を挿入する方法について解説します。

画像挿入・完成イメージ

本記事のゴールは、上図のようにExcel上に画像を挿入することとします。

その過程で記述するPythonプログラムは、以下プロセスで記載していきます。

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

【事前準備】Pythonライブラリのインストール

OpenpyXL

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

pip install openpyxl

PILLOW(PIL)

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

pip install Pillow

【Python×Excel】OpenPyXLでエクセルに画像を挿入|実践

それでは実際に以下の手順でPythonプログラムを構築し、Excelに画像ファイルを挿入します。

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

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

適切な画像サイズで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ファイル名をopenpyxl.Workbook()メソッドに渡し、saveメソッドで保存します。ここで既存のExcelファイルに対して画像を貼り付けたい場合、このプロセスは不要です。

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×Excel】画像の挿入法・プログラミングコード全量掲載

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

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)

【参考】Pythonで面倒な作業を自動化!手法一挙公開中!

当サイトでは日々面倒な作業をPythonで自動化する方法を多数配信しております。日々の作業が飛躍的効率化できること間違いなしですので、以下気になった記事があれば併せてご覧ください。

【面倒なタスクをPythonで解決!】作業効率化の人気記事一覧




【参考】Pythonとは?・実現できること

最後に

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

本記事をシェア!
目次