メインコンテンツへスキップ

PythonでCSV→Excel変換3ステップ #5

    1. 概要

    このPythonスクリプトは、ユーザーが選択した複数のCSVファイルのデータを読み取り、指定されたExcelテンプレートに書き込んだ後、特定のフォルダに新しいExcelファイルとして保存することを目的としています。GUIを通じてファイル選択を促し、処理結果をメッセージボックスでユーザーに通知します。
    本スクリプトは個人練習用として作成されたもので、動作保証はありません。

    2. 要件定義

    • ライブラリとツール:

      • Python 3.x

      • ライブラリ: tkinter, pandas, openpyxl, os

      • GUIフレームワーク: tkinter(ファイル選択ダイアログと通知メッセージ表示)

    • 入力要素:

      • 複数のCSVファイル

      • Excelテンプレートファイル

      • データ保存先フォルダ

    • 処理内容:

      • 選択されたCSVファイルからのデータ読み込み

      • データをExcelテンプレートに書き込み

      • 新しいファイル名でExcelファイルを保存

    • 出力:

      • 新しく生成されたExcelファイル

      • 処理されたファイル数と保存先フォルダの情報通知

    3. 利用方法

    • 環境設定:

      • 必要なライブラリをインストール: pip install pandas openpyxl

      • スクリプトを実行可能なPython環境(IDEまたはコマンドライン)

    • 実行手順:

      1. スクリプトをPython環境で実行。

      2. GUIダイアログで処理するCSVファイルを選択。

      3. Excelテンプレートファイルを選択。

      4. 処理されたデータを保存するフォルダを選択。

      5. 全ての処理が完了すると、処理されたファイル数と保存先情報がメッセージボックスで表示されます。

    4.コード例1  

    import tkinter as tk
    from tkinter import filedialog, messagebox, simpledialog
    import pandas as pd
    from openpyxl import load_workbook
    from openpyxl.utils.dataframe import dataframe_to_rows
    import os
    
    def process_data():
        root = tk.Tk()
        root.withdraw()  # GUIウィンドウを非表示に設定
    
        # ユーザーによる複数のCSVファイルの選択
        csv_files = filedialog.askopenfilenames(title='処理するCSVファイルを選択してください', filetypes=[('CSV files', '*.csv')])
        if not csv_files:
            messagebox.showerror("エラー", "CSVファイルが選択されませんでした。")
            return
    
        # Excelテンプレートファイルの選択
        excel_file = filedialog.askopenfilename(title='Excelテンプレートファイルを選択してください', filetypes=[('Excel files', '*.xlsx')])
        if not excel_file:
            messagebox.showerror("エラー", "Excelファイルが選択されませんでした。")
            return
    
        # 処理結果の保存先フォルダの選択
        save_folder = filedialog.askdirectory(title='保存先のフォルダを選択してください')
        if not save_folder:
            messagebox.showerror("エラー", "保存先のフォルダが選択されませんでした。")
            return
    
        processed_files_count = 0  # 処理されたファイル数のカウント
    
        # 各CSVファイルに対する処理
        for csv_path in csv_files:
            df = pd.read_csv(csv_path)  # CSVファイルからデータを読み込む
    
            # 保存するExcelファイル名の入力
            user_filename = simpledialog.askstring("ファイル名入力", "保存するExcelファイルの名前を入力してください(拡張子除く):")
            if not user_filename:
                messagebox.showerror("エラー", "ファイル名が入力されませんでした。")
                continue  # ファイル名が入力されなかった場合、次のファイルへスキップ
    
            # Excelファイルの操作
            book = load_workbook(excel_file)  # Excelテンプレートファイルを読み込む
            sheet_name = 'データシート'  # 操作するシート名
            if sheet_name in book.sheetnames:
                del book[sheet_name]  # 既存のシートがあれば削除
            sheet = book.create_sheet(sheet_name)  # 新しいシートを作成
    
            rows = dataframe_to_rows(df, index=False, header=True)  # DataFrameをExcelシートの行に変換
            # 'rows'からデータを1行ずつ読み込み、Excelシートに追加する。
            # enumerateを使用して、各行にインデックスを付与し、インデックスは2から始まる。
            # これにより、Excelファイルのデータ挿入が2行目から開始される。
            for r_idx, row in enumerate(rows, start=2):
                sheet.append(row)
    
            # 新しいExcelファイルに保存
            new_excel_path = os.path.join(save_folder, f"{user_filename}.xlsx")
            book.save(new_excel_path)
            processed_files_count += 1  # 処理されたファイル数をカウントアップ
    
        # 処理完了の通知
        messagebox.showinfo("完了", f"全てのデータ処理が完了しました。\n処理されたファイル数: {processed_files_count}\n保存先フォルダー: {save_folder}")
    
    if __name__ == "__main__":
        process_data()
    


     
     
    データと生成AIで「つくって壊して、また組み直す」実験ログ。 プロンプト・AIアート・分析ツールを公開中。 ツール・記事ネタを持ち帰れる場所です。 呼び名:にーやん/きたさん|PR・ご相談歓迎|Amazonアソシエイト参加中

    あなたへのおすすめ