2025年4月14日 星期一 批量生成劳动合同PY代码

一颗大白菜5个月前我的技能196

第一步:

建立劳动合同文档模板。

image.png

第二步:

整理表格数据。

image.png

第三步:

image.png

第四步:

查看文件

image.png

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()


免责声明
如果您对本文有异议,请先阅读本站《免责声明》,如仍保持您个人观点可与本人联系。

相关文章

吉林省企业职工养老保险基本养老金个人指数计算器

吉林省企业职工养老保险基本养老金个人指数计算器

此软件使用 Python 编写,与网页版同步。(上下图非统一数据文件,所以数据不同,计算方式相同)下载消耗1积分。...

2025年6月25日 星期三  合同管理系统,单机免费

2025年6月25日 星期三 合同管理系统,单机免费

 ## 项目介绍这是一个不需要联网的本地合同管理系统,用于管理公司的合同文档。系统具有用户登录、公司选择、合同分类管理等功能,支持上传PDF、Excel、Word等格式的合同文件。## 功能...

前几天谁问我要WPS免安装 无联网版来的?WPS Office 2016

前几天谁问我要WPS免安装 无联网版来的?WPS Office 2016

1.功能全面2.删除开发工具一栏3.启动速度快,资源占用小,不会后台驻留4.除程序必要名称外,删除一切关于WPS的内容(绝对纯净无广告)5.删除联网组件,永久有效,打开即用,无需注册6.体积小,适合硬...

Everything 是一款免费的 Windows 文件搜索工具,它最大的优点是搜索近乎变态的快!!

Everything 是一款免费的 Windows 文件搜索工具,它最大的优点是搜索近乎变态的快!!

[CommShow]分享名称:[Windows] Everything v1.5.0.1385a 便携版.rar分享链接:http://zb.ccxb.net:3181/#s/_eLovcHA访问密码...

DataEase 人人可用的开源 BI 工具

DataEase 人人可用的开源 BI 工具

什么是 DataEase ?...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

服务热线

18686626826

微信客服

微信客服

2025年度企业稳岗补贴公式查询系统
优秀经办人 AI播客,多元呈现,沉浸体验
吉林省企业职工退休养老金智能核算与服务系统
×