概要
pythonを用いたエクセルシートのコピー
について試してみました。
備忘録として記載いたします。
実行環境
windows:Windows11Pro 23H2
python version:Python 3.12.3
実行結果
実行スクリプト
tool.py
import tkinter as tk
from tkinter import filedialog, messagebox
from openpyxl import load_workbook, Workbook
def copy_or_overwrite_sheet():
try:
# 元のExcelファイルを選択
input_file = filedialog.askopenfilename(
filetypes=[("Excel files", "*.xlsx")], title="元のExcelファイルを選択してください")
if not input_file:
return
# シート名を取得
wb_source = load_workbook(input_file)
sheet_names = wb_source.sheetnames
# シート選択ウィンドウ
sheet_name_window = tk.Toplevel()
sheet_name_window.title("シート選択")
tk.Label(sheet_name_window, text="コピーするシートを選んでください:").pack(pady=5)
selected_sheet = tk.StringVar(value=sheet_names[0])
sheet_dropdown = tk.OptionMenu(sheet_name_window, selected_sheet, *sheet_names)
sheet_dropdown.pack(pady=5)
def select_sheet():
sheet_name = selected_sheet.get()
ws_source = wb_source[sheet_name]
# 保存先ファイルを選択
output_file = filedialog.asksaveasfilename(
defaultextension=".xlsx", filetypes=[("Excel files", "*.xlsx")], title="保存先を選択してください")
if not output_file:
return
# 保存先ファイルの存在チェック
try:
wb_new = load_workbook(output_file) # 既存ファイルをロード
except FileNotFoundError:
wb_new = Workbook() # 新規作成
# 既存の同名シートを削除
if sheet_name in wb_new.sheetnames:
del wb_new[sheet_name]
# 新しいシートを作成してコピー
ws_new = wb_new.create_sheet(title=sheet_name)
for row in ws_source.iter_rows(values_only=True):
ws_new.append(row)
# 保存
wb_new.save(output_file)
messagebox.showinfo("成功", f"シート '{sheet_name}' が '{output_file}' にコピー・上書きされました!")
sheet_name_window.destroy()
tk.Button(sheet_name_window, text="選択してコピーを実行", command=select_sheet).pack(pady=10)
sheet_name_window.mainloop()
except Exception as e:
messagebox.showerror("エラー", f"エラーが発生しました:\n{e}")
# GUIを作成
root = tk.Tk()
root.title("Excelシートコピー・上書き")
root.geometry("400x200")
# 実行ボタン
copy_button = tk.Button(root, text="ファイルを選択してコピー", command=copy_or_overwrite_sheet)
copy_button.pack(pady=20)
# GUIを表示
root.mainloop()
batファイルでの実行ファイル
tool.bat
@echo off
python tool.py
pause