【Python】スケジュール設定でExcelレポートを定期作成する方法|Scheduleモジュールでの作業自動化

こんにちは、Kosei(@kay_diacc2)です!

こんな方におすすめ!
  • Pythonで面倒なExcelレポートの作成を自動化したい!
  • 時間指定により定期的にExcelレポートが自動作成できるようにしたい!
目次

【概要】Excelレポート作成を定期実行

本記事ではPythonを用いて定期的にExcelレポートを作成する方法について解説します。

なお、「スケジュール」および「Excel操作」のPythonライブラリを用いて実現します。それぞれの具体的な使い方については別途記事を配信していますため、そちらをご覧下さい。

スケジュール

Excel操作

【参考】業務効率化を検討する上でおすすめの教材

Pythonを用いて業務効率化を実践したい方向けにおすすめの教材を紹介します。こちらにPythonを用いてExcel操作を行うの具体的な方法も言及されています。

【Python実践】決まった時間にExcelレポートを作成する方法

それでは実際にPythonで定期的にExcelレポートを作成する方法について解説します。

【事前準備】サンプルデータとフォルダ構成

レポーティング用のサンプルデータとしてExcel_Sample_Dataを用います。

事前にダウンロードしておきましょう。

加えて、サンプルデータと実際に記述するPythonスクリプトは同じディレクトリに配置しましょう。

  • data.xlsx(サンプルデータ)
  • python.py(Pythonスクリプトファイル)

【事前準備】Pythonライブラリのインストール

Schedule関数を起動させるには以下のPythonライブラリが必要です。事前にインストールしておきましょう。

定期実行用モジュール

pip install schedule

Excel操作用モジュール

pip install openpyxl

Python|Excel関数

Excelレポートを作成するためのスクリプトを以下に示します。今回は参照したデータをグラフ化するスクリプトを例として記載します。

#モジュール読込
import openpyxl
import pandas as pd
from openpyxl.chart import Reference
from openpyxl.chart.axis import DateAxis
from openpyxl.chart.layout import Layout, ManualLayout


def create_excel_report():
    """
    *******************************
    データ読込
    *******************************
    """

    # 読込ファイル名
    input_filename = "data.xlsx"
    df   = pd.read_excel(input_filename)

    """
    *******************************
    Excelファイル作成
    *******************************
    """
    # 出力ファイル名
    output_filename = "Excel_Report.xlsx"

    # Excelワークブック・シート作成
    workbook = openpyxl.Workbook(output_filename)
    sheet    = workbook.create_sheet(index=0)

    # 保存
    workbook.save(output_filename)

    """
    *******************************
    グラフ作成
    *******************************
    """
    # Excelワークブック・シート読込
    workbook = openpyxl.load_workbook(output_filename)
    sheet = workbook.active

    # データ書き込み
    sheet["A1"] = "株価比較"
    sheet["A2"] = "日付"
    sheet["B2"] = "A社株価"
    sheet["C2"] = "B社株価"

    # データ出力
    for i in range(len(df)):
        sheet["A"+str(3+i)] = df.iloc[i,0]
        sheet["B"+str(3+i)] = df.iloc[i,1]
        sheet["C"+str(3+i)] = df.iloc[i,2]

    """ 
    *******************************
    01 グラフオブジェクト
    *******************************
    """
    graph_obj = openpyxl.chart.LineChart()  #グラフの種類
    graph_obj.title  = "株価"                #グラフのタイトル
    graph_obj.style  = 15                   #グラフのフォントサイズ
    graph_obj.height = 10                   #高さ
    graph_obj.width  = 20                   #幅

    #Y軸設定
    graph_obj.y_axis.title = "株価"
    graph_obj.y_axis.crossAx = 500

    #X軸設定
    graph_obj.x_axis = DateAxis(crossAx=100)
    graph_obj.x_axis.number_format = 'd-mmm' 
    graph_obj.x_axis.majorTimeUnit = "days"
    graph_obj.x_axis.title = "日付"

    """ 
    *******************************
    02 データの範囲設定
    *******************************
    """
    #Y軸範囲
    Y_axis = Reference(sheet, min_col=2, min_row=2, max_col=3, max_row=len(df)+2)
    graph_obj.add_data(Y_axis, titles_from_data=True)

    #X軸範囲
    X_axis = Reference(sheet, min_col=1, min_row=4, max_col=1, max_row=len(df)+2)
    graph_obj.set_categories(X_axis)

    """ 
    *******************************
    03 グラフのスタイル詳細設定
    *******************************
    """
    style         = graph_obj.series[0]
    style.smooth  = True                               
    style2        = graph_obj.series[1]
    style2.smooth = True                 

    # 配置場所
    sheet.add_chart(graph_obj, "E3")

    #保存
    workbook.save(output_filename)

PythonでExcelのグラフを作成する具体的な解説はこちらの記事で行っています。

Python|スケジュール関数

前述で作成したExcel関数を定期的に実行するスケジュール関数を作成します。

以下の例は、毎日10:00にExcelレポートが作成される仕様として記載しています。

# ライブラリをインポート
import schedule
from time import sleep
    
# スケジュール登録
schedule.every().days.at("10:00").do(create_excel_report)

# イベント実行
while True:
    schedule.run_pending()
    sleep(1)

Excel×Pythonの自動化手法まとめ

本記事をご覧いただきありがとうございました!本記事ではExcel操作の自動化に役立つノウハウを多数配信しています。これからExcel作業の自動化に取り組みたい方向けには下記の記事が参考になるかと思います。是非ご覧ください!

PythonによるExcel自動操作を学習する上でのおすすめ教材もご紹介しています。

最後に

この記事が気に入ったら
フォローしてね!

本記事をシェア!
URLをコピーする
URLをコピーしました!
目次
閉じる