概要
日々の業務でテキストファイルの編集に時間を費やしていませんか?Pythonを使えば、特定のタグをリアルタイムで編集し、その内容を簡単にクリップボードにコピーできるプログラムを作成できます。本記事では、特にメールのテンプレート化や定型文書の編集に便利なプログラムを紹介します。
使用例
例えば、以下のような注文書のテンプレートがあるとします。
========================================
① 消耗品
----------------------------------------
② 品名: <品名>
----------------------------------------
③ 数量: <数量>
----------------------------------------
④ 単位: 1個
----------------------------------------
⑤ 単価(税抜き): <単価>円
(合計 <合計金額>円)
----------------------------------------
⑥ 納入希望日: 最短納期
----------------------------------------
⑦ 発注先: 株式会社企業商事
----------------------------------------
⑧ 依頼者: <依頼者>
----------------------------------------
⑨ メーカー名: 企業製作所
製品番号: <製品番号>
見積もりNo.: なし
納品場所: 第1工場
========================================
このプログラムを使うことで、<品名>
, <数量>
, <単価>
, <合計金額>
, <依頼者>
, <製品番号>
といったタグに対応する部分をGUI上で簡単に編集できます。そして、編集後の内容をボタン一つでクリップボードにコピーできます。メールのテンプレート化や定型文書の編集に最適です。
必要なプログラム
- Python 3.7以上
tkinter
ライブラリ(標準ライブラリの一部)pyperclip
ライブラリtkinterdnd2
ライブラリ
インストール方法
必要なライブラリをインストールするには、以下のコマンドを実行してください。
pip install tkinterdnd2 pyperclip
使用手順
- Pythonスクリプトの準備:
text_editor_app.py
としてスクリプトを保存します(プログラムの記述は省略)。
- プログラムの実行:
- コマンドラインから以下のコマンドを実行してPythonプログラムを起動します。bashコードをコピーする
python text_editor_app.py
- コマンドラインから以下のコマンドを実行してPythonプログラムを起動します。bashコードをコピーする
- ドラッグアンドドロップでファイルを読み込む:
- プログラムが起動したら、編集したいテキストファイルをウィンドウ内にドラッグアンドドロップします。
- タグの編集:
- 読み込んだテキストファイル内の
<>
で囲まれたタグが自動的に検出され、対応するエントリーフィールドが表示されます。これらのフィールドに値を入力することで、テキスト内容がリアルタイムで更新されます。
- 読み込んだテキストファイル内の
- 編集内容のコピー:
- 「コピー」ボタンをクリックすると、編集後のテキスト全体がクリップボードにコピーされます。
注意点
- テキストファイル内のタグは
<>
で囲まれている必要があります。 - ファイルをドラッグアンドドロップする際、対応するディレクトリへのアクセス権限が必要です。
プログラム
Pythonの標準ライブラリtkinter
とtkinterdnd2
を使用して、GUIの構築とドラッグアンドドロップ機能を実装しています。
import tkinter as tk
from tkinter import filedialog, messagebox
import pyperclip
import re
from tkinterdnd2 import DND_FILES, TkinterDnD
class TextEditorApp:
def __init__(self, root):
self.root = root
self.root.title("テキストファイルビューア")
# Textbox to display the content of the file
self.textbox = tk.Text(self.root, height=15, width=80)
self.textbox.pack()
# Frame to hold entry widgets
self.entry_frame = tk.Frame(self.root)
self.entry_frame.pack()
# Button to copy content to clipboard
self.copy_button = tk.Button(self.root, text="コピー", command=self.copy_to_clipboard)
self.copy_button.pack()
# Dictionary to hold entry widgets and their corresponding tags
self.entries = {}
# Enable drag-and-drop for the root window
self.root.drop_target_register(DND_FILES)
self.root.dnd_bind('<<Drop>>', self.drop)
def drop(self, event):
file_path = event.data
if file_path:
file_path = file_path.strip('{}') # Remove curly braces from the path
self.load_file(file_path)
def load_file(self, file_path):
if file_path:
with open(file_path, 'r', encoding='utf-8') as file:
self.content = file.read()
self.textbox.delete(1.0, tk.END)
self.textbox.insert(tk.END, self.content)
self.create_entries()
def create_entries(self):
# Clear any previous entries
for widget in self.entry_frame.winfo_children():
widget.destroy()
# Find all <tag> elements
tags = re.findall(r'<(.*?)>', self.content)
self.entries = {}
for tag in tags:
frame = tk.Frame(self.entry_frame)
label = tk.Label(frame, text=f"{tag}:")
entry = tk.Entry(frame)
entry.bind("<KeyRelease>", self.update_content)
label.pack(side="left")
entry.pack(side="left")
frame.pack()
self.entries[tag] = entry
def update_text(self):
content = self.content
for tag, entry in self.entries.items():
value = entry.get()
content = re.sub(f"<{tag}>", value, content)
self.textbox.delete(1.0, tk.END)
self.textbox.insert(tk.END, content)
def copy_to_clipboard(self):
content = self.textbox.get(1.0, tk.END)
pyperclip.copy(content)
messagebox.showinfo("情報", "クリップボードにコピーされました")
def update_content(self, event):
self.update_text()
if __name__ == "__main__":
root = TkinterDnD.Tk()
app = TextEditorApp(root)
root.mainloop()
なお、下記txtファイルをダウンロードして「.py」に書き換えて使用することもできます。
text_editor_app
まとめ
本記事では、テキストファイルをドラッグアンドドロップで読み込み、タグをリアルタイムで編集し、その内容をクリップボードにコピーするPythonプログラムを紹介しました。このプログラムを使用することで、メールのテンプレート化や定型文書の編集作業を大幅に効率化できます。ぜひ試してみてください。