大量の JPEG 画像を Excel 上に一覧化し、確認や共有を容易にしたい場合は、openpyxl を使って自動で画像を読み込み、セルへ貼り付けると作業時間を大幅に短縮できます。ここでは *画像フォルダー内の .jpg ファイルを順番に読み込み、3 行目以降の列 B に整列して配置 するサンプルコードとポイントを解説いたします。
目次
動作環境
項目 | 内容 |
---|
Python | 3.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'].width と row_dimensions[row].height で、画像がセルに収まるよう事前調整します。 |
画像サイズの統一 | img.width と img.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 ファイルへ画像を直接貼り付けられます。
- 列幅・行高をコード側で揃えることで、手作業による微調整を行わずに済みます。
- フォルダー単位で処理するため、新たな画像が追加された際もスクリプトを再実行するだけで一覧を更新できます。