データの可視化や業務の自動化が進む中、Excelファイルに埋め込まれた画像(グラフのスナップショット、製品写真、ロゴなど)は、多くの重要な情報を担っています。これらの画像を手動で抽出するのは手間がかかり、複数ファイルを扱う場合は非効率です。Pythonスクリプトを活用することで、Excel内の画像を自動的に抽出・保存でき、アーカイブ、レポート作成、画像処理など幅広い用途に活用できます。
本記事では、Pythonを使ってExcelファイル内の画像を抽出・保存する方法をご紹介します。
使用ライブラリ:Free Spire.XLS for Python
インストール(PyPI):pip install spire.xls.free
PythonでExcel内の画像を抽出・保存する手順
Spire.XLSが提供するインターフェースを使用すれば、各ワークシートに埋め込まれた画像を1つずつ取得して、画像ファイルとして保存できます。この手法はシンプルで効率的なため、バッチ処理にも最適です。
操作手順
-
Workbook
オブジェクトを作成し、LoadFromFile()
メソッドで対象のExcelファイルを読み込みます。 - すべてのワークシートをループ処理で取得し、
Workbook.Worksheets.get_Item()
で現在のワークシートを参照します。 -
Worksheet.Pictures
プロパティを使ってワークシート内の画像コレクションを取得し、順に処理します。 -
Worksheet.Pictures.get_Item()
で各画像を取得し、XlsBitmapShape.SaveToImage()
メソッドでローカル画像ファイル(例:PNG形式)として保存します。 - ファイル名にシート番号と画像番号を付与して重複を避け、管理しやすくします。
- 最後にリソースを解放します。
サンプルコード
from spire.xls import Workbook
# Workbook オブジェクトを作成します
workbook = Workbook()
# Excel ファイルを読み込みます
workbook.LoadFromFile("Sample.xlsx")
# ワークブック内のワークシートを順に処理します
for i in range(workbook.Worksheets.Count):
# 現在のワークシートを取得します
sheet = workbook.Worksheets.get_Item(i)
# ワークシート内の画像を順に処理します
for j in range(sheet.Pictures.Count):
# 現在の画像を取得します
pic = sheet.Pictures.get_Item(j)
# 画像をファイルとして保存します
pic.SaveToImage("output/ExcelImages/Sheet_" + str(i) + "Image_" + str(j) + ".png")
# リソースを解放します
workbook.Dispose()
出力結果(画像ファイル)
この記事では、Pythonを用いてExcelファイル内の画像を一括で抽出し、ローカルに保存する方法をご紹介しました。このアプローチは、業務効率化、ドキュメント整理、画像アーカイブなどの多様なニーズに対応でき、拡張性・実用性ともに優れています。
さらに高度な処理(画像の分類管理、形式変換、メタデータの取得など)を行いたい場合は、Pillowなどの画像処理ライブラリと組み合わせて開発することも可能です。