Excelファイル内のグラフを一括で画像保存するPythonツールの使い方

Excelで作成したグラフを一つ一つ手作業で画像として保存するのは面倒ですよね。今回紹介するPythonスクリプトを使えば、フォルダ内のすべてのExcelファイルからグラフを自動で抽出し、PNG画像として保存できます。業務の自動化やレポート作成に非常に便利です。

特徴

  • 指定フォルダ内のすべてのExcelファイルを自動スキャン
  • 各シート内のグラフを個別にPNG画像として保存
  • ファイル名に元のExcelファイル名とシート名を含むため、識別しやすい

事前準備

このスクリプトはWindows環境とMicrosoft ExcelがインストールされているPCでのみ動作します。

必要なPythonモジュール

  • pywin32(WindowsのCOM経由でExcelを操作)

以下のコマンドでインストールできます:

pip install pywin32

スクリプトの内容

プログラムの主な構成は以下の通りです:

  1. save_charts_from_excel
     個々のExcelファイルを開き、すべてのシートからグラフを画像として保存します。
  2. process_folder
     指定されたフォルダ内のExcelファイルを順次処理します。
  3. main処理
     カレントフォルダを対象に、処理を実行します。
import os
import win32com.client

def save_charts_from_excel(file_path, output_folder):
    excel = win32com.client.Dispatch("Excel.Application")
    excel.DisplayAlerts = False
    excel.Visible = False

    try:
        abs_file_path = os.path.abspath(file_path)
        abs_output_folder = os.path.abspath(output_folder)

        wb = excel.Workbooks.Open(abs_file_path)

        for sheet in wb.Sheets:
            chart_count = 0
            for chart in sheet.ChartObjects():
                img_path = os.path.join(
                    abs_output_folder,
                    f"{os.path.splitext(os.path.basename(file_path))[0]}_{sheet.Name}_chart{chart_count}.png"
                )
                chart.Chart.Export(os.path.abspath(img_path))
                chart_count += 1

        wb.Close(False)
    except Exception as e:
        print(f"エラーが発生しました: {file_path} → {e}")
    finally:
        excel.Quit()

def process_folder(folder_path, output_folder):
    abs_folder_path = os.path.abspath(folder_path)
    abs_output_folder = os.path.abspath(output_folder)

    os.makedirs(abs_output_folder, exist_ok=True)
    
    for filename in os.listdir(abs_folder_path):
        if filename.endswith(".xlsx") or filename.endswith(".xls") or filename.endswith(".xlsm"):
            file_path = os.path.join(abs_folder_path, filename)
            save_charts_from_excel(file_path, abs_output_folder)

folder_path = "."
output_folder = "."
process_folder(folder_path, output_folder)

使い方

1. スクリプトを保存

添付の saveExcelFigure.py を任意のフォルダに保存してください。

2. 処理対象フォルダにExcelファイルを配置

グラフを抽出したい .xlsx.xlsm 形式のファイルを同じフォルダに置きます。

3. スクリプトを実行

コマンドプロンプトまたはPowerShellで以下のように実行します:

python saveExcelFigure.py

保存される画像ファイル名のルール

画像は以下の形式で出力されます:

[元のファイル名]_[シート名]_chart[連番].png

例:

report2023_Sheet1_chart0.png
report2023_Sheet1_chart1.png

カスタマイズ方法

folder_pathoutput_folder の変数を変更することで、処理対象フォルダや保存先フォルダを任意の場所に変更できます。

folder_path = "C:/path/to/excel/files"
output_folder = "C:/path/to/save/images"

よくあるエラー

  • Excelがインストールされていない
     → WindowsにMicrosoft Excelがインストールされている必要があります。
  • ファイルが開かない/グラフが見つからない
     → グラフが「オブジェクト」として挿入されていない、あるいは対応していない形式である可能性があります。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です