Excel Pythonツール tkinter ファイル指定 フォルダ指定

PythonとTkinterで作るExcel文字列一括置換ツール:簡単な使い方と注意点

概要

Excelファイル内の特定の文字列を、別のExcelファイルで指定したマッピングに従って一括で置換したいと思ったことはありませんか?この記事では、PythonのTkinterを使って作成したシンプルなExcel文字列置換ツールを紹介します。このツールでは、pandasopenpyxlライブラリを使ってExcelファイルを操作します。また、プログラムの詳しい使い方やインストール方法も紹介しています。

使用例

以下のような場合に、このプログラムは役立ちます。

  • Excelデータの一括変換:Excelファイル内の特定の文字列を、マッピングファイルで指定した文字に一括で変換したい場合。
  • データクレンジング:大量のExcelデータから特定のテキストを検索して置換する際に、効率的に作業を行いたい場合。
  • 業務自動化:日々のデータ作業の中で、定期的に同じ変換処理が必要な場合に自動化したい場合。

インストール方法

このツールを使うには、Pythonといくつかの必要なライブラリをインストールする必要があります。

  1. Pythonのインストール Pythonがインストールされていない場合は、Python公式サイトからダウンロードしてインストールしてください。
  2. 必要なライブラリのインストール プログラムを実行するためには、pandasopenpyxlのライブラリが必要です。以下のコマンドを実行してインストールしましょう。
    pip install pandas openpyxl

使用手順

以下は、このExcel文字列置換ツールの使い方の手順です。

1. プログラムの準備

提供されたPythonコード(例: excel_replacer.py)を任意のディレクトリに保存します。

2. Excelファイルの準備

  • 置換対象のExcelファイル: 置換処理を実行したいExcelファイルを用意します。
  • マッピング用のExcelファイル: 置換用のマッピングファイルを準備します。このファイルでは、A列に置換したい文字列、B列にその置換後の文字列を記述します。

3. プログラムの実行

プログラムを実行すると、以下のような手順でツールが起動します。

  • 「置換対象のExcelファイルを選択」ボタンをクリックして、置換処理を行いたいExcelファイルを選択します。
  • 「マッピング用Excelファイルを選択」ボタンをクリックして、マッピングのExcelファイルを選択します。
  • 「置換開始」ボタンをクリックすると、指定されたマッピングに従って置換処理が行われ、結果のファイルが保存されます。

下記が「マッピング用Excelファイル」のサンプルファイルになります。ダウンロードして中身を書き換えてください。

4. 結果の確認

処理後、元のExcelファイルと同じフォルダに、_completed.xlsxという名前の置換後のExcelファイルが保存されます。


注意点

このプログラムを利用する際の注意点です。

  1. マッピング用Excelファイルのフォーマット
    マッピング用のExcelファイルは、必ずA列に置換前の文字列、B列に置換後の文字列を入れてください。もしマッピングが正しく行われない場合、Excelファイルのフォーマットが異なっている可能性があります。
  2. エンコーディングとファイル形式
    Excelファイルは.xlsx形式のみ対応しています。.xlsやその他の形式では動作しないため、.xlsxに変換してください。
  3. ファイルサイズとパフォーマンス
    Excelファイルが大きすぎる場合、処理に時間がかかることがあります。大規模なファイルを扱う際は、適切な環境で実行してください。
  4. 依存関係
    プログラムはpandasopenpyxlライブラリに依存しています。必ず事前にインストールしてください。

プログラム

以下に、プログラムのコードを記述しています。

import tkinter as tk
from tkinter import filedialog, messagebox
import pandas as pd
from openpyxl import load_workbook
import os

# メインウィンドウの作成
root = tk.Tk()
root.title("Excel文字列置換ツール")
root.geometry("400x200")

# ファイルパスを保存する変数
excel_file_path = ""
mapping_excel_file_path = ""

# ファイル選択の関数
def select_excel_file():
    global excel_file_path
    excel_file_path = filedialog.askopenfilename(filetypes=[("Excel files", "*.xlsx")])
    excel_label.config(text=os.path.basename(excel_file_path))

def select_mapping_excel_file():
    global mapping_excel_file_path
    mapping_excel_file_path = filedialog.askopenfilename(filetypes=[("Excel files", "*.xlsx")])
    mapping_excel_label.config(text=os.path.basename(mapping_excel_file_path))

# 置換処理を行う関数
def replace_text_in_excel():
    if not excel_file_path or not mapping_excel_file_path:
        messagebox.showwarning("ファイル未選択", "置換対象のExcelファイルとマッピング用Excelファイルを選択してください。")
        return

    # マッピング用のExcelファイルを読み込む
    try:
        df_mapping = pd.read_excel(mapping_excel_file_path)
    except Exception as e:
        messagebox.showerror("エラー", f"マッピング用Excelファイルの読み込み中にエラーが発生しました:\n{e}")
        return

    # A列とB列のマッピングを辞書に変換
    replace_dict = dict(zip(df_mapping.iloc[:, 0], df_mapping.iloc[:, 1]))

    # 置換対象のExcelファイルの読み込み
    wb = load_workbook(excel_file_path)
    for sheet in wb.worksheets:
        for row in sheet.iter_rows():
            for cell in row:
                if cell.value and isinstance(cell.value, str):
                    original_value = cell.value
                    for old_text, new_text in replace_dict.items():
                        if old_text in cell.value:
                            cell.value = cell.value.replace(old_text, new_text)

    # 保存先のファイルパス
    save_path = os.path.splitext(excel_file_path)[0] + '_completed.xlsx'

    # 置換後のExcelファイルを保存
    wb.save(save_path)
    messagebox.showinfo("完了", f"置換後のファイルが保存されました:\n{save_path}")

# ウィジェットの配置
excel_button = tk.Button(root, text="置換対象のExcelファイルを選択", command=select_excel_file)
excel_button.pack(pady=10)

excel_label = tk.Label(root, text="置換対象のExcelファイルが未選択です")
excel_label.pack()

mapping_excel_button = tk.Button(root, text="マッピング用Excelファイルを選択", command=select_mapping_excel_file)
mapping_excel_button.pack(pady=10)

mapping_excel_label = tk.Label(root, text="マッピング用Excelファイルが未選択です")
mapping_excel_label.pack()

start_button = tk.Button(root, text="置換開始", command=replace_text_in_excel)
start_button.pack(pady=20)

root.mainloop()

あるいは、下のテキストファイルをダウンロードし、「.txt」を「.py」に変えることでそのまま使えます。

(リンクをクリックすると、コードのテキストファイルをダウンロードできます。ファイル拡張子を.pyに変更するだけでPythonスクリプトとして実行できます。)


まとめ

この記事では、PythonとTkinterを使ってExcelファイル内の文字列を一括で置換する方法を解説しました。このツールを使うことで、Excelファイルの文字列置換作業を効率的に行うことができます。以下がこの記事のまとめです。

  • Pythonプログラムを使ったExcel文字列置換ツールの紹介
  • Tkinterを使った簡単なGUIの構築
  • pandasとopenpyxlを使ったExcelデータの操作
  • 注意点とエラー回避方法の説明

このツールを活用して、Excelファイルの置換作業を効率化しましょう!

-Excel, Pythonツール, tkinter, ファイル指定, フォルダ指定