目次
プログラムの内容
このPythonプログラムは、ユーザーが選択したExcelファイル内に貼り付けられた全ての画像を一括でJPEG形式で保存するデスクトップアプリケーションです。主な機能は、Excelファイルから画像の抽出とJPEG形式での保存です。
機能概要
- Excelファイルの選択: ユーザーがグラフィカルなインターフェースを通じてExcelファイルを選択します。
- 画像の抽出: 選択されたExcelファイルから全ての画像を抽出します。
- JPEG形式での保存: 抽出した画像をJPEG形式で指定された出力フォルダに保存します。
- ファイル名の連番: 保存される画像のファイル名は「image001」から始まる連番となります。
事前準備
このプログラムを実行する前に、openpyxl
とPillow
ライブラリがPython環境にインストールされている必要があります。これらは、Excelファイルの読み込みと画像の処理に必要です。
ソースコード
import openpyxl
from openpyxl.drawing.image import Image as OpenpyxlImage
from PIL import Image
from tkinter import Tk, filedialog
import os
def save_images_from_excel():
Tk().withdraw() # Tkinterダイアログの準備
excel_file_path = filedialog.askopenfilename(title="Excelファイルを選択してください", filetypes=(("Excel files", "*.xlsx"), ("All files", "*.*")))
if not excel_file_path:
print("ファイルが選択されませんでした。")
return
save_folder_path = filedialog.askdirectory(title="保存先フォルダを選択してください")
if not save_folder_path:
print("フォルダが選択されませんでした。")
return
wb = openpyxl.load_workbook(excel_file_path, data_only=True)
image_count = 0
for ws in wb.worksheets:
for drawing in ws._images:
if isinstance(drawing, OpenpyxlImage):
img = Image.open(drawing.ref)
if img.mode == "RGBA":
img = img.convert("RGB")
file_name = f"image{image_count + 1:03}.jpeg"
img.save(os.path.join(save_folder_path, file_name))
image_count += 1
print(f"{image_count}個の画像を保存しました。")
if __name__ == "__main__":
save_images_from_excel()
使い方
- ソースコードを
.py
ファイルとして保存し、Python環境で実行します。 - 実行するとファイル選択ダイアログが表示されるので、画像を抽出したいExcelファイルを選択します。
- 次にフォルダ選択ダイアログが表示されるので、画像を保存したい出力フォルダを選択します。
- プログラムが全ての画像をJPEG形式で保存し終えると、完了メッセージが表示されます。
雑記
仕事上手順書とかを良く作製するのだけれども、スクリーンショットを撮っていちいち保存するのがめんどくさくてExcelに貼り付けるといったことを良くやります。
貼り付けるのはいいけれどもその後jpegに保存し直すのがめんどくさくて、一括で何とかしたいなぁと思ってChatGPTにプログラムを書かせました。
まあそもそもスクリーンショット用のソフトを使えよという話ではありますが、そこまでするのもめんどくさいんだよなぁというときに使います。
コメント