Python(openpyxl)で多数の画像を 1 冊の Excel ファイルへ一括貼り付ける方法

大量の JPEG 画像を Excel 上に一覧化し、確認や共有を容易にしたい場合は、openpyxl を使って自動で画像を読み込み、セルへ貼り付けると作業時間を大幅に短縮できます。ここでは *画像フォルダー内の .jpg ファイルを順番に読み込み、3 行目以降の列 B に整列して配置 するサンプルコードとポイントを解説いたします。


目次

動作環境

項目内容
Python3.10 以上
必要ライブラリopenpyxl (pip install openpyxl)
画像フォルダー./pictures
出力ファイルphoto_catalog.xlsx

サンプルコード

from pathlib import Path
from openpyxl import Workbook
from openpyxl.drawing.image import Image

# 1) 新規ワークブックを作成
wb_catalog = Workbook()
ws_gallery = wb_catalog.active
ws_gallery.title = 'PhotoGallery'

# 列幅を画像に合わせて調整(B 列)
ws_gallery.column_dimensions['B'].width = 28

# 2) 画像フォルダーを指定
img_dir = Path('./pictures')

# 3) フォルダー内の JPG を順に読み込み・貼り付け
for idx, img_path in enumerate(img_dir.glob('*.jpg'), start=1):
    target_row = idx + 2                 # 3 行目から配置
    ws_gallery.row_dimensions[target_row].height = 120

    img = Image(img_path)
    img.width  = 95                      # 必要に応じて調整
    img.height = 115

    # 画像をセル B{行番号} に挿入
    ws_gallery.add_image(img, f'B{target_row}')

# 4) 保存
wb_catalog.save('photo_catalog.xlsx')

コードのポイント

処理詳細
列幅・行高の調整column_dimensions['B'].widthrow_dimensions[row].height で、画像がセルに収まるよう事前調整します。
画像サイズの統一img.widthimg.height を指定することで、異なる解像度の画像でも均一な表示になります。
画像配置セルの指定"B{row}" のようにセルアドレスを文字列で渡すと、手動調整なしで整列します。
enumerate(…, start=1)連番を 1 から始め、貼り付け先を 3 行目 (idx + 2) に設定しています。

拡張アイデア

目的実装例
PNG・GIF も対象にするglob('*.jpg')glob('*.[jp][pn]g') などへ変更
画像ファイル名を隣列へ表示ws_gallery.cell(row, 3).value = img_path.name を追加
フォルダー階層のサブディレクトリも含むimg_dir.rglob('*.jpg') を使用し、サブフォルダーも再帰検索

まとめ

  • openpyxl.drawing.image.Image を活用すると、Excel ファイルへ画像を直接貼り付けられます。
  • 列幅・行高をコード側で揃えることで、手作業による微調整を行わずに済みます。
  • フォルダー単位で処理するため、新たな画像が追加された際もスクリプトを再実行するだけで一覧を更新できます。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次