用Python轻松批量生成Word合同:解放双手,喝口咖啡就搞定!☕

Hey 小伙伴们!看起来今天是个闲适的下午呢!要知道,下午茶后很容易晕晕乎乎的,嘿嘿!☀️但是,我告诉你,今天我要教你一个特别酷的技巧,就是用Python编程语言来批量生成Word合同哦!📝🚀

先别急,我们先来杯清茶🍵,然后马上开启这段奇妙的Python之旅吧!相信我,一杯茶的功夫,就能搞定一堆合同!💻

本文的最后,我们会提供用到的word和excel的文档哦!

准备工具:Python是我的大秘密武器!🐍

首先,我们需要准备两个重要的法宝:一是Python,二是一个闪亮的Word模板文件 (.docx)。大家都知道,Python是程序员的好朋友,无所不能👯‍♂️(如果没有Python基础的话,可以看我的趣学Python基础专栏);而Word模板文件则是各式各样、千奇百态的,让我们找一个顺眼的作为参考吧!

好!现在让我们来点这段python黑魔法,让合同如小猫一般乖乖跟着我们跳舞吧!

点燃魔力:Python代码登场!✨

开始写代码之前,记得先安装一下docx和pandas这两个库哦:

pip install python-docx pandas openpyxl

接下来,我们来看一下我们的Python代码:

import pandas as pd
from docx import Document
import os


def replace_and_underline(run, placeholder, replacement_text):
    if placeholder in run.text:
        replaced_text = run.text.replace(placeholder, replacement_text)
        run.clear()  # Clear the existing run
        run.add_text(replaced_text)  # Add the replaced text
        run.underline = True  # Set underline for the new run


def batch_create_word_by_template(clients_path, template_path, output_path):
    clients = pd.read_excel(clients_path)

    for index, client in clients.iterrows():
        # 创建一个新的合同文档
        doc = Document(template_path)

        # 替换合同中的占位符并在替换后的文字下方加下划线
        for paragraph in doc.paragraphs:
            for run in paragraph.runs:
                replace_and_underline(run, '【合同编号】', str(client['【合同编号】']))
                replace_and_underline(run, '【采购方】', str(client['【采购方】']))
                replace_and_underline(run, '【采购方地址】', str(client['【采购方地址】']))
                replace_and_underline(run, '【采购方联系人】', str(client['【采购方联系人】']))
                replace_and_underline(run, '【采购方电话】', str(client['【采购方电话】']))
                replace_and_underline(run, '【产品名称】', str(client['【产品名称】']))
                replace_and_underline(run, '【采购数量】', str(client['【采购数量】']))
                replace_and_underline(run, '【采购单价】', str(client['【采购单价】']))
                replace_and_underline(run, '【总价数字】', str(client['【总价数字】']))
                replace_and_underline(run, '【总价大写】', str(client['【总价大写】']))
                replace_and_underline(run, '【供货时限(天)】', str(client['【供货时限(天)】']))

        # 保存生成的合同
        output_filename = f"食品采购合同_{client['【采购方】']}.docx"
        if not os.path.exists(output_path):
            os.makedirs(output_path)
        doc.save(os.path.join(output_path, output_filename))

    print("所有合同已成功生成!")


# 示例用法
batch_create_word_by_template(
    'C:/Users/olive/Desktop/合同模板和数据/食品采购合同数据表.xlsx',
    'C:/Users/olive/Desktop/合同模板和数据/食品采购合同.docx',
                'C:/Users/olive/Desktop/生成的合同')

代码解析

1、首先,导入了必要的库:
  - pandas:用于读取Excel数据表。
  - docx(python-docx库的一部分):用于对Word文档进行处理。
  - os:用于创建目录和进行文件系统操作。

2、然后,定义了辅助函数replace_and_underline:
  - 此函数根据给定的占位符文本和替换文本,在替换后的文本下方添加下划线。

3、接下来,定义了主函数batch_create_word_by_template:
  - 该函数接受三个参数:客户数据表的文件路径(clients_path)、合同模板文件的路径(template_path)和输出路径(output_path)。
  - 使用pandas读取Excel数据表,将数据存储在名为"clients"的DataFrame对象中。
  - 遍历数据表中的每一行客户信息,生成合同文档:
    - 针对每个客户,创建一个新的合同文档对象(doc)。
    - 遍历合同中的段落(paragraphs)和运行(run),使用replace_and_underline辅助函数根据占位符和客户数据替换文本并添加下划线。
    - 保存生成的合同文档,并将文件保存到指定的输出路径中。

4、示例用法:
  - 在示例中,我们调用batch_create_word_by_template函数来生成合同文档,并传入客户数据表的文件路径、合同模板文件的路径和输出路径。

这段代码会将每个客户的合同生成为一个带有下划线的Word文档,并保存到指定的输出路径中。

激动人心的测试🌟

终于又进入到激动人心的测试阶段了,我们先准备两个文件,一个是word合同模板,一个是用于记录合同具体数据的excel文档:

这个合同模板总共有3页,我们就看和要替换数据有关的这第一页。带有【】的就是我们要替换的部分。

接着,我们看一下要替换的数据,打开我们的excel文档:

这张表记录了所有要替换的关键字的具体数据。

这两个文件,都放在我的桌面上的【合同模板和数据】文件夹下:

下载来,改一下我们的测试代码:

# 示例用法
batch_create_word_by_template(
    'C:/Users/olive/Desktop/合同模板和数据/食品采购合同数据表.xlsx',
    'C:/Users/olive/Desktop/合同模板和数据/食品采购合同.docx',
    'C:/Users/olive/Desktop/生成的合同')

注意,要改成你自己的文件路径哦。

接下来,跑一下我们的代码吧,很快,在我的桌面上的这个文件夹下,生成了三份合同:

我们打开任何一个文档,看一下效果吧:

非常帮,数据都成功地被替换进来了。

总结:让我们一起迎接合同生成新时代!✨

所以,是不是觉得超级Cool呢?这招python黑魔法就是这么便捷,让合同生成不再费时费力了。快来尝试一下吧,不仅能提高工作效率,还能在生活中创造更多可能!☕✨!

最后提供文中用到的word和excel:

链接: https://pan.baidu.com/s/1OFnMSBzgqvU8Qd8BjheIPQ?pwd=cn5u 提取码: cn5u 
--来自百度网盘超级会员v6的分享

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值