1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

pythonでエクセルシートのコピーを試してみる

Last updated at Posted at 2025-07-17

概要

pythonを用いたエクセルシートのコピー
について試してみました。
備忘録として記載いたします。

実行環境

windows:Windows11Pro 23H2
python version:Python 3.12.3

実行結果

コピー元ファイルを選択する
image.png

コピー元ファイルのシートを選択する
image.png

「選択してコピーを実行」を押下する
image.png

コピー先のエクセルファイルが存在することを確認する
image.png

シートがコピーされたことを確認する
image.png

実行スクリプト

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
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?