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'
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, column=0, columnspan=4, pady=10, sticky="w")
self.out_put = tk.Text(self.output_frame, height=10, width=80,font=("Arial", 12))
self.out_put.grid(row=0, column=0, padx=10, pady=10, sticky="w")
# 执行替换和退出按钮
self.buttons_frame = tk.Frame(self.root)
self.buttons_frame.grid(row=4, column=2, padx=10, pady=10, sticky="n")
self.replace_button = tk.Button(self.buttons_frame, text="执行替换", command=self.replace_text)
self.replace_button.grid(row=0, column=0, pady=5)
self.quit_button = tk.Button(self.buttons_frame, text="退出代码", command=self.root.quit)
self.quit_button.grid(row=1, column=0, pady=5)
self.windows_output("欢迎使用提取excel内容到word工具")
self.windows_output("str:普通填入替换内容")
self.windows_output("random_init:\n\t替换内容为:随机生成几个整数,以逗号隔开:如:1,5,3。示例-->2,5,4")
self.windows_output("random_float:\n\t替换内容为:随机生成几个小数,以逗号隔开,可填入4个数,最后一个数为小数位数默认为2为小数,最后的2可省略:\t如生成3个0.1到1.2之间的随机数,保留2位小数:0.1,1.2,3,2。示例-->0.21,0.55,0.65")
self.windows_output("sheet_key:\n\t替换内容为:输入需要填入excel数据所在的列,如:B")
self.windows_output("sheet_key_operate:\n\t替换内容为:将excel数据中的几列进行拼接:如A-F.输出的:拼接的数据以,隔开,")
logger.info("欢迎使用excel内容提取到word工具")
def on_frame_configure(self, event):
self.canvas.configure(scrollregion=self.canvas.bbox("all"))
# 定义一个函数,用于添加学生信息到JSON文件中
def update_replacement_inputs(self):
# 删除现有的所有子部件
for widget in self.inputs_frame.winfo_children():
widget.destroy()
# 创建新的替换内容输入框
self.create_replacement_inputs(self.replace_count_var.get())
def create_replacement_inputs(self, count):
self.replacements = []
for i in range(count):
frame = tk.Frame(self.inputs_frame)
frame.grid(row=i, column=0, pady=5)
tk.Label(frame, text=f"替换内容{i + 1}:").grid(row=0, column=0, padx=5)
is_table_content_var = tk.BooleanVar(value=1)
tk.Checkbutton(frame, text="是否为表格内容", variable=is_table_content_var).grid(row=0, column=1, padx=5)
original_text_var = tk.StringVar()
tk.Entry(frame, textvariable=original_text_var, width=20).grid(row=0, column=2, padx=5)
tk.Label(frame, text="表格号:").grid(row=0, column=3, padx=5)
table_var = tk.IntVar()
tk.Entry(frame, textvariable=table_var, width=5).grid(row=0, column=4, padx=5)
tk.Label(frame, text="行号:").grid(row=0, column=5, padx=5)
row_var = tk.IntVar()
tk.Entry(frame, textvariable=row_var, width=5).grid(row=0, column=6, padx=5)
tk.Label(frame, text="列号:").grid(row=0, column=7, padx=5)
col_var = tk.IntVar()
tk.Entry(frame, textvariable=col_var, width=5).grid(row=0, column=8, padx=5)
tk.Label(frame, text="请选择一个选项:").grid(row=0, column=9, padx=5)
options = ["str", "random_int", "random_float", "sheet_key", "sheet_key_operate"]
combo = ttk.Combobox(frame, values=options)
combo.grid(row=0, column=10, padx=5)
combo.current(0)
tk.Label(frame, text="替换内容:").grid(row=0, column=11, padx=5)
replacement_text_var = tk.StringVar()
tk.Entry(frame, textvariable=replacement_text_var, width=20).grid(row=0, column=12, padx=5)
self.replacements.append({
'is_table_content_var': is_table_content_var, # 是否为表格内容
'original_text_var': original_text_var, # 原始文本
'table_var': table_var, # 表格号
'row_var': row_var, # 行号
'col_var': col_var, # 列号
'combo': combo, # 选项
'replacement_text_var': replacement_text_var # 替换文本
})
def load_word_file(self):
self.word_path = filedialog.askopenfilename(filetypes=[("Word文件", "*.docx")])
self.word_entry.delete(0, tk.END)
self.word_entry.insert(0, self.word_path)
def load_excel_file(self):
self.excel_path = filedialog.askopenfilename(filetypes=[("Excel文件", "*.xlsx")])
self.excel_entry.delete(0, tk.END)
右恩
- 粉丝: 424
- 资源: 4
最新资源
- 基于Matlab实现FOPID控制器,对一个二阶系统进行控制详细文档+全部资料+高分项目.zip
- 基于Matlab数字音频处理系统详细文档+全部资料+高分项目.zip
- 基于Matlab-图像处理系统,图像增强,图像去噪,图像加噪,图像旋转,还会画爱心详细文档+全部资料+高分项目.zip
- 基于matlab制作的图像美化系统,包括:摄像头获取头像、读取文件、几何变换、噪声等功能详细文档+全部资料+高分项目.zip
- 基于OFDM通信系统,发送机、信道、接收机设计及simulink实现,BPSK、QAM多种调制方式详细文档+全部资料+高分项目.zip
- 基于对硅微机械陀螺的系统结构以及自激振荡驱动进行Simulink仿真详细文档+全部资料+高分项目.zip
- 基于高速主轴不平衡振动分析及抑制方法研究软件系统详细文档+全部资料+高分项目.zip
- 基于信号与系统及数字信号处理的电子音乐合成详细文档+全部资料+高分项目.zip
- 基于通过MATLAB的GUI设计了一款动态温度采集与显示的上位机系统详细文档+全部资料+高分项目.zip
- 软件开发管理制度修订版1.0
- TACACSS、ldap、radius模拟测试工具
- F2812DSP的最小系统设计
- <数据集>芝麻作物和杂草识别数据集<目标检测>
- Unity热力图插件,很好的在数字孪生或一些需要的场景使用
- 电子元器件选型-电容器
- MATLAB考试题MATLAB考试题pdf
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈