声明
本篇内容,仅限个人使用,禁止商用,商用请联系
使用场景:
类似word中的邮件功能:通过查找替换,替换原有word中的内容:
同时,批量生成内容:如使用excel中的一列作为word新文件的文件名
具体如下::::
替换为指定str word中的查找替换
替换为随机生成的整数
替换为随机的小数
替换为excel中的值
替换为excel中拼接的值
代码大纲
本程序一共包括下面5个内容
1、main.py 主运行函数
2、generate_windows.py # 用于使用tkinter生成新窗口
3、replace_content.py # 用于word中替换内容
4、save_to_json.py # 用于将用户输入的内容保存到本地
5、some_opera.py # 一些其他的操作
6、关注公众号:了解更多,私信我,一起交流
1、main.py 函数
# ---encoding:utf-8---
# @Time : 2024/8/3 07:52
# @Author : 关注公众号:右恩
# @File : main.py
# @Project : 关注公众号:右恩
# @Software: PyCharm
# love
# If I can't be a god, I'll be a beast
from generate_windows import WordExcelReplacerApp
import tkinter as tk
root = tk.Tk()
app = WordExcelReplacerApp(root) # 运行主函数
root.mainloop()
2、generate_windows.py 函数
# ---encoding:utf-8---
# @Time : 2024/8/3 08:02
# @Author : 关注公众号:右恩
# @File : generate_windows.py
# @Project : 关注公众号:右恩
# @Software: PyCharm
# love
# If I can't be a god, I'll be a beast
import tkinter as tk
from tkinter import filedialog, messagebox, ttk
import logging
import os
from openpyxl import load_workbook
import some_opera
import time # 模拟耗时任务
import replace_content
from save_to_json import UserDataManager
from docx import Document
folder_path1 = './log' # 定义一个本地输入Log的文件夹
folder_path2 = './output' # 输出文件夹
# 判断文件夹是否存在,如果不存在,则新建一个
if os.path.exists(folder_path1) and os.path.exists(folder_path2):
pass
else:
os.makedirs(folder_path1)
os.makedirs(folder_path2)
# 配置日志记录
logging.basicConfig(filename='./log/main.log', level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s', encoding="utf-8")
logger = logging.getLogger()
class WordExcelReplacerApp:
def __init__(self, root):
self.root = root
self.root.title("Word-Excel 替换工具 关注公众号:右恩")
self.word_path = ""
self.excel_path = ""
self.replacements = []
self.results = []
self.index_i = 0
# GUI布局
self.create_widgets()
self.user_data = UserDataManager()
def create_widgets(self):
tk.Label(self.root, text="选择Word文件:").grid(row=0, column=0, padx=10, pady=5)
self.word_entry = tk.Entry(self.root, width=50)
self.word_entry.grid(row=0, column=1, padx=10, pady=5)
self.word_button = tk.Button(self.root, text="浏览...", command=self.load_word_file)
self.word_button.grid(row=0, column=2, padx=10, pady=5)
tk.Label(self.root, text="选择Excel文件:").grid(row=1, column=0, padx=10, pady=5)
self.excel_entry = tk.Entry(self.root, width=50)
self.excel_entry.grid(row=1, column=1, padx=10, pady=5)
self.excel_button = tk.Button(self.root, text="浏览...", command=self.load_excel_file)
self.excel_button.grid(row=1, column=2, padx=10, pady=5)
# 替换数量选择
tk.Label(self.root, text="需要替换的数量:").grid(row=2, column=0, padx=10, pady=5)
self.replace_count_var = tk.IntVar(value=5)
self.replace_count_spinbox = tk.Spinbox(self.root, from_=1, to=15, textvariable=self.replace_count_var,
command=self.update_replacement_inputs)
self.replace_count_spinbox.grid(row=2, column=1, padx=10, pady=5)
# 创建一个可滚动的框架用于替换内容输入框
self.canvas = tk.Canvas(self.root, height=200,width=1150)
self.inputs_frame = tk.Frame(self.canvas)
self.scrollbar = tk.Scrollbar(self.root, orient="vertical", command=self.canvas.yview)
self.canvas.configure(yscrollcommand=self.scrollbar.set)
self.scrollbar.grid(row=3, column=3, sticky="ns")
self.canvas.grid(row=3, column=0, columnspan=3, pady=10)
self.canvas.create_window((0, 0), window=self.inputs_frame, anchor="nw")
self.inputs_frame.bind("<Configure>", self.on_frame_configure)
# 创建初始的替换内容输入框
self.update_replacement_inputs()
# 输出框
self.output_frame = tk.Frame(self.root)
self.output_frame.grid(row=4