![見出し画像](https://assets.st-note.com/production/uploads/images/147986691/rectangle_large_type_2_6dae97b965ec11d58bc86b1702782a1b.png?width=1200)
Photo by
mericanadesico
制作物#1:Pythonを使用したCSVデータのExcelへの自動インポート
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またはコマンドライン)
実行手順:
スクリプトをPython環境で実行。
GUIダイアログで処理するCSVファイルを選択。
Excelテンプレートファイルを選択。
処理されたデータを保存するフォルダを選択。
全ての処理が完了すると、処理されたファイル数と保存先情報がメッセージボックスで表示されます。
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()