【Python】定期レポートを自動でExcelに出力しメール送信するスクリプトの作成

【Python】定期レポートを自動でExcelに出力しメール送信するスクリプトの作成 Python

業務の自動化を進める上で、「定期レポートを作成し、Excel形式でメール送信する」という処理は非常に需要があります。この記事では、Pythonを使ってExcelファイルを生成し、SMTP経由でメールに添付して送信する一連のスクリプトを紹介します。

必要なライブラリのインストール

まずは必要なライブラリをインストールしましょう。

pip install pandas openpyxl

メール送信に必要な標準ライブラリ smtplibemail はPythonにあらかじめ含まれているため、追加インストールは不要です。

Excelレポートを生成する処理

以下のように、pandasとopenpyxlを使ってサンプルのレポートデータをExcelファイルに出力します。

import pandas as pd
from datetime import datetime

# サンプルデータの作成
data = {
    '日付': [datetime.today().strftime('%Y-%m-%d')] * 5,
    '部署': ['営業部', '開発部', '人事部', '総務部', '経理部'],
    '売上': [150000, 230000, 120000, 95000, 175000]
}
df = pd.DataFrame(data)

# Excel出力
filename = f'report_{datetime.today().strftime("%Y%m%d")}.xlsx'
df.to_excel(filename, index=False)

メールでExcelファイルを送信する

生成したExcelファイルを、SMTPを使ってメール送信します。以下はGmailのSMTPサーバーを利用した例です。

import smtplib
from email.message import EmailMessage

# メール設定
EMAIL_ADDRESS = 'your_email@gmail.com'
EMAIL_PASSWORD = 'your_app_password'
TO_ADDRESS = 'receiver@example.com'

msg = EmailMessage()
msg['Subject'] = '定期レポート'
msg['From'] = EMAIL_ADDRESS
msg['To'] = TO_ADDRESS
msg.set_content('本日のレポートを送付いたします。')

# ファイル添付
with open(filename, 'rb') as f:
    file_data = f.read()
    msg.add_attachment(file_data, maintype='application',
                       subtype='vnd.openxmlformats-officedocument.spreadsheetml.sheet',
                       filename=filename)

# GmailのSMTPサーバーで送信
with smtplib.SMTP_SSL('smtp.gmail.com', 465) as smtp:
    smtp.login(EMAIL_ADDRESS, EMAIL_PASSWORD)
    smtp.send_message(msg)

※ Gmailを使う場合、アプリパスワードの利用をおすすめします。2段階認証を有効にし、アプリ専用のパスワードを発行してください。

スケジュール実行の設定(オプション)

このスクリプトを自動実行するには、OSごとにスケジューラを使います。

  • Windows: タスクスケジューラで .bat を登録
  • macOS/Linux: crontabpython スクリプト.py を記述

例(Linuxのcrontabで毎朝9時に実行):

0 9 * * * /usr/bin/python3 /path/to/your/script.py

まとめ

Pythonを使えば、手動で行っていたExcelレポート作成とメール送信を、わずか数十行で自動化できます。業務の効率化やヒューマンエラー防止に繋がるため、ぜひ取り入れてみてください。