2025年4月14日 星期一 批量生成劳动合同PY代码
第一步:
建立劳动合同文档模板。
第二步:
整理表格数据。
第三步:
第四步:
查看文件
import tkinter as tk
from tkinter import filedialog, messagebox
from openpyxl import load_workbook
import os
import threading
from docx import Document
class WordDocumentGenerator:
def __init__(self, root):
self.root = root
self.root.geometry("800x800")
self.excel_file = None
self.word_template = None
self.output_dir = None
self.stop_flag = False
self.create_folders = tk.BooleanVar()
self.prefix = tk.StringVar()
self.suffix = tk.StringVar()
self.selected_fields = []
font_style = ("微软雅黑", 12)
# 创建 GUI 组件
tk.Label(root, text="选择 Excel 文件", font=font_style).pack(pady=10)
self.excel_path_label = tk.Entry(root, width=50, state="readonly", font=font_style)
self.excel_path_label.pack(pady=5)
tk.Button(root, text="浏览", command=self.select_excel_file, font=font_style).pack(pady=5)
tk.Label(root, text="选择 Word 模板", font=font_style).pack(pady=10)
self.word_path_label = tk.Entry(root, width=50, state="readonly", font=font_style)
self.word_path_label.pack(pady=5)
tk.Button(root, text="浏览", command=self.select_word_template, font=font_style).pack(pady=5)
tk.Label(root, text="选择输出目录", font=font_style).pack(pady=10)
self.output_dir_label = tk.Entry(root, width=50, state="readonly", font=font_style)
self.output_dir_label.pack(pady=5)
tk.Button(root, text="浏览", command=self.select_output_directory, font=font_style).pack(pady=5)
tk.Checkbutton(root, text="创建文件夹", variable=self.create_folders, font=font_style).pack(pady=10)
tk.Label(root, text="前缀:", font=font_style).pack(pady=5)
tk.Entry(root, textvariable=self.prefix, font=font_style).pack(pady=5)
tk.Label(root, text="后缀:", font=font_style).pack(pady=5)
tk.Entry(root, textvariable=self.suffix, font=font_style).pack(pady=5)
tk.Button(root, text="生成 Word 文档", command=self.generate_word_docs, font=font_style).pack(pady=20)
tk.Button(root, text="停止生成", command=self.stop_generating, font=font_style).pack(pady=10)
def select_excel_file(self):
self.excel_file = filedialog.askopenfilename(filetypes=[("Excel files", "*.xlsx;*.xls")])
if self.excel_file:
self.excel_path_label.config(state="normal")
self.excel_path_label.delete(0, tk.END)
self.excel_path_label.insert(0, self.excel_file)
self.excel_path_label.config(state="readonly")
def select_word_template(self):
self.word_template = filedialog.askopenfilename(filetypes=[("Word files", "*.docx")])
if self.word_template:
self.word_path_label.config(state="normal")
self.word_path_label.delete(0, tk.END)
self.word_path_label.insert(0, self.word_template)
self.word_path_label.config(state="readonly")
def select_output_directory(self):
self.output_dir = filedialog.askdirectory()
if self.output_dir:
self.output_dir_label.config(state="normal")
self.output_dir_label.delete(0, tk.END)
self.output_dir_label.insert(0, self.output_dir)
self.output_dir_label.config(state="readonly")
def load_excel_fields(self, excel_file):
workbook = load_workbook(excel_file)
sheet = workbook.active
headers = [cell.value for cell in sheet[1]]
return headers
def generate_word_docs(self):
if not self.excel_file or not self.word_template or not self.output_dir:
messagebox.showerror("错误", "请选择 Excel 文件、Word 模板和输出目录")
return
self.stop_flag = False
threading.Thread(target=self.fill_word_from_excel, args=(
self.excel_file, self.word_template, self.output_dir, self.create_folders.get(),
self.prefix.get(), self.suffix.get(), self.load_excel_fields(self.excel_file))).start()
def stop_generating(self):
self.stop_flag = True
def fill_word_from_excel(self, excel_file, word_template, output_dir, create_folders, prefix, suffix,
selected_fields):
workbook = load_workbook(excel_file)
sheet = workbook.active
template = Document(word_template)
for row in sheet.iter_rows(min_row=2, values_only=True):
if self.stop_flag:
break
data = dict(zip(selected_fields, row))
new_doc = Document(word_template)
for paragraph in new_doc.paragraphs:
for key, value in data.items():
if key in paragraph.text:
for run in paragraph.runs:
run.text = run.text.replace(key, str(value))
if create_folders:
folder_name = os.path.join(output_dir, f"{prefix}{data.get(selected_fields[0], '')}{suffix}")
os.makedirs(folder_name, exist_ok=True)
output_path = os.path.join(folder_name, f"{prefix}{data.get(selected_fields[0], '')}{suffix}.docx")
else:
output_path = os.path.join(output_dir, f"{prefix}{data.get(selected_fields[0], '')}{suffix}.docx")
new_doc.save(output_path)
if __name__ == "__main__":
root = tk.Tk()
app = WordDocumentGenerator(root)
root.mainloop()










![[优秀经办人]品牌](http://ccxb.net/c20062a4916fa3f59f5409ddfdddd15f.jpg)

