仕様書
— このスクリプトが「何を・どの順で・何を出力するか」の説明書 —
| 対象スクリプト | daily_sales_report.py(複数店舗 日次売上集計) |
|---|---|
| ご依頼内容 | 各店舗から届く日次売上CSVを、月次のExcelレポートに自動集計 |
| 実行環境 | Windows 10/11・Python 3.12/ライブラリ:pandas, openpyxl |
| 作成日 | 2026-07-02 |
| 作業方法 | お客様の実データは使用せず、ダミーCSVのみで開発・確認しています |
1. このスクリプトがやっていること(全体像)
input/ フォルダに置かれた各店舗の日次売上CSV(複数ファイル)をすべて読み込み、
店舗別・日別に集計したうえで、1つのExcelレポート(グラフ・店舗別シートつき)として output/ フォルダに出力します。
毎月手作業でCSVを開いてコピー&ペーストしていた集計作業を、フォルダにCSVを置いて実行するだけで完了する状態にするものです。
2. 入力ファイルの想定形式
input/ フォルダの中にある *.csv をすべて対象とします。1店舗=1ファイルで、
ファイル名は問いません(フォルダ内のCSVを自動で読み取ります)。各CSVの列構成は次のとおりです。
| 列名 | 形式 | 内容 |
|---|---|---|
日付 | YYYY-MM-DD | 売上が発生した日付 |
店舗名 | 文字列 | 店舗の名称(レポートの店舗別シート名に使用) |
売上金額 | 数値(円・カンマなし) | その日の税込売上合計 |
客数 | 整数 | その日の来客数(客単価の算出に使用) |
サンプルCSVの1行目(ヘッダー)
日付,店舗名,売上金額,客数 2026-06-01,渋谷店,182400,96 2026-06-01,新宿店,204300,110
3. 処理の流れ
全体の処理順序 main()
input/フォルダ内のCSVファイルを一覧取得(0件ならメッセージを出して終了)- ファイルを1つずつ読み込み、列名・日付形式・欠損値をチェック(異常があれば4章のとおり記録して次のファイルへ)
- すべてのCSVを1つの表に結合
- 「店舗別」「日別」「店舗×日別」の3パターンで集計(pandasの
groupby) - Excelブックを新規作成し、集計結果をシートごとに書き出し(openpyxl)
- 店舗別売上の棒グラフをExcel内に自動生成
output/売上レポート_YYYYMMDD.xlsxとして保存し、完了メッセージを表示
4. 出力Excelレポートの構成
| シート名 | 内容 |
|---|---|
サマリー | 期間全体の合計売上・合計客数・平均客単価、店舗別売上の棒グラフ |
店舗別集計 | 店舗ごとの合計売上・合計客数・平均客単価の一覧表 |
日別集計 | 日付ごとの全店舗合計売上・客数の一覧表 |
明細(店舗×日) | 店舗×日付のクロス集計表(ピボット形式) |
取込エラー一覧 | 読み込みに失敗した行・ファイルがあった場合のみ、内容と理由を記載 |
5. 必要なライブラリ
| ライブラリ | 用途 |
|---|---|
pandas | CSVの読み込み・結合・集計(groupby / pivot_table) |
openpyxl | Excelブックの作成・書式設定・グラフ生成 |
バージョンは requirements.txt に固定して同梱します。インストール方法は
実行手順書をご覧ください。
6. エラー時の挙動
⚠ 想定しているエラーと挙動
- 列が足りない・列名が違うCSV:そのファイルはスキップし、「取込エラー一覧」シートにファイル名と理由を記録。処理全体は止めずに続行します
- 日付・金額が数値として読めない行:その行だけを除外し、同様にエラー一覧へ記録します(1行の不備で全体が止まらない設計です)
input/フォルダにCSVが1件もない:画面にメッセージを表示して、Excelを作成せずに終了しますoutput/フォルダが存在しない:スクリプトが自動作成してから保存します- 同名の出力ファイルが既に開かれている(Excelで開いたまま等):保存に失敗した旨のメッセージを表示して終了します。ファイルを閉じてから再実行してください
想定外のエラーが起きた場合も、原因箇所とエラー内容を output/error_log.txt に記録してから終了する設計です(実行画面が消えても後から確認できます)。