运维侠职场日记17:用DeepSeek三天通关详解新手必看!Python+Word批量合同生成!文员3天工作3秒完成

一. 痛点

运维侠小白有下面烦恼,听说python可以轻松扫除这些烦恼于是迫不及待想学…

“每天要手动修改word?
一不小心就出错,加班到深夜?
Python 几行代码,让你准时下班!…”

在这里插入图片描述

学会基础,困难一点点远离,乐趣一步步靠近

学习就像追妹子,你只能看到背影,但只要坚持日积月累的付出,迟早她整个人属于你❤。
在这里插入图片描述

欢迎阅读:Python邮件自动化大全打工人逆袭

二.基础:准备工作

⚠️避免报错:

  1. 文件路径 没有写绝对路径默认是处理python代码所在路径的文件,因此需要把代码文件放到这个处理的文件同一文件夹里。

(1)安装 python-docx模块

💻 代码:在命令行终端执行

# 安装必要库(命令行执行)
# pip install python-docx

在这里插入图片描述

(2)基本构成:word文档的"四件套"结构

想象Excel就像一本老式账本:

📒 段落(paragraph):每个积木组合成的形状

📦表格(Cell):每个小格子

📚 图片(picture):账本里的照片

📄 样式(Sheet):衣服的种类,休闲服、婚礼正装等

结构示意图:
在这里插入图片描述

三.进阶:基础操作

⚠️避免报错:

  1. 文件路径 没有写绝对路径默认是处理python代码所在路径的文件,因此需要把代码文件放到这个处理的文件同一文件夹里。
  2. 修改部分代码 可以举一反三,这个也能生成合同第一页。

(1)创建单个Word 文档

💻 代码:

# ---------------------------
# 自动生成Word文档
# ---------------------------
from docx import Document

# 1. 创建一个空白Word文档对象
doc = Document()

# 2. 添加标题(级别0为最大标题)
doc.add_heading('我的第一个模板', 0)

# 3. 添加正文段落
doc.add_paragraph('客户姓名: ____________')
doc.add_paragraph('缴费金额: ____________')

# 4.保存

doc.save(r'C:\Users\ZHAOY\PycharmProjects\1\整理后的文件\文档\创建单个通知单模板.docx')
print("✅ Word文档生成成功!")

如图:
在这里插入图片描述

(2)读取文档内容

💻 代码:

from docx import Document
def read_doc(file_path):
    try:
        doc = Document(file_path)
        for i, paragraph in enumerate(doc.paragraphs):
            print(f"第{i+1}段:{paragraph.text}")
    except FileNotFoundError:
        print(f"⚠️ 找不到文件:{file_path}")

read_doc(r'C:\Users\ZHAOY\PycharmProjects\1\整理后的文件\文档\单个创建通知单模板.docx')

源文档:
在这里插入图片描述

如图:
在这里插入图片描述

(3)添加图片

💻 代码:

from docx import Document
from docx.shared import Inches  # ← 关键导入!

def add_image(doc, img_path):
    try:
        doc.add_picture(img_path, width=Inches(3))  # 控制照片大小
        print(f"✅ 已插入图片:{img_path}")
    except FileNotFoundError:
        print(f"⚠️ 图片不存在:{img_path}")

doc = Document()
add_image(doc, r'C:\Users\ZHAOY\PycharmProjects\1\整理后的文件\图片\窗边水彩下午茶时光.jpg')
doc.save(r'C:\Users\ZHAOY\PycharmProjects\1\整理后的文件\文档\带图文档.docx')

如图:
在这里插入图片描述

(4)添加表格

💻 代码:

from docx import Document

def create_table(data):
    doc = Document()
    table = doc.add_table(rows=3, cols=3)

    # 填数据防错机制
    try:
        for row in range(3):
            for col in range(3):
                table.cell(row, col).text = str(data[row][col])
    except IndexError:
        print("⚠️ 数据量超过表格容量!")

    doc.save(r'C:\Users\ZHAOY\PycharmProjects\1\整理后的文件\文档\数据表.docx')


data = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
create_table(data)

如图:
在这里插入图片描述

⏰提示:一种需求可以有多种类型代码实现,实际中,我们可以从中选择,最适合的。应用场景,如下:

企业合同管理系统基础模板

销售订单自动生成系统

财务报销单模板生成器

课程报名信息登记表

通过这个模板生成器,后续可以结合客户数据自动填充生成完整合同,实现办公自动化流程的完整闭环。

四.实战案例集锦:

(1)阶段一基础版:自动生成Excel模版文件

💻 代码:基础读取

from openpyxl import load_workbook

# 测试文件路径
wb = load_workbook(r'C:\Users\ZHAOY\PycharmProjects\1\整理后的文件\文档\客户数据.xlsx')
ws = wb.active
print(ws['A2'].value)  # 预期输出:客户A

如图:
在这里插入图片描述

💻 代码:1. 创建空模板

from openpyxl import Workbook
from openpyxl.styles import Font
import os


def create_template():
    # 创建新工作簿
    wb = Workbook()
    ws = wb.active  # 获取第一个工作表

    # 设置表头(后续步骤填充)

    # 创建输出目录
    output_path = r"C:\Users\ZHAOY\PycharmProjects\1\整理后的文件\文档"
    if not os.path.exists(output_path):
        os.makedirs(output_path)

    # 保存文件
    wb.save(os.path.join(output_path, "合同模板.xlsx"))


if __name__ == "__main__":
    create_template()
    print("模板生成成功!")

如图:
在这里插入图片描述

💻 代码:2. 添加表头的模版

from openpyxl import Workbook
from openpyxl.styles import Font
import os


def create_template():
    # 创建新工作簿
    wb = Workbook()
    ws = wb.active  # 获取第一个工作表

    # 设置表头
    headers = ["客户名称", "产品名称", "金额", "签约日期"]
    ws.append(headers)  # 写入第一行

    # 设置标题格式
    for cell in ws[1]:  # 遍历第一行所有单元格
        cell.font = Font(bold=True, color="FF0000")  # 加粗+红色字体

    # 创建输出目录
    output_path = r"C:\Users\ZHAOY\PycharmProjects\1\整理后的文件\文档"
    if not os.path.exists(output_path):
        os.makedirs(output_path)

    # 保存文件
    wb.save(os.path.join(output_path, "合同模板-数据.xlsx"))


if __name__ == "__main__":
    create_template()
    print("模板生成成功!")

如图:
在这里插入图片描述
💻 代码:3. 添加客户信息的模版

from openpyxl import Workbook
from openpyxl.styles import Font
import os


def create_template():
    # 创建新工作簿
    wb = Workbook()
    ws = wb.active  # 获取第一个工作表

    # 设置表头
    headers = ["客户名称", "产品名称", "金额", "签约日期"]
    ws.append(headers)  # 写入第一行

    # 在表头下方添加示例数据行
    sample_data = ["客户A", "笔记本电脑", "金额", "6500"]
    ws.append(sample_data)

    # 设置标题格式
    for cell in ws[1]:  # 遍历第一行所有单元格
        cell.font = Font(bold=True, color="FF0000")  # 加粗+红色字体

    # 创建输出目录
    output_path = r"C:\Users\ZHAOY\PycharmProjects\1\整理后的文件\文档"
    if not os.path.exists(output_path):
        os.makedirs(output_path)

    # 保存文件
    wb.save(os.path.join(output_path, "合同模板-客户信息.xlsx"))


if __name__ == "__main__":
    create_template()
    print("模板生成成功!")

如图:
在这里插入图片描述
💻 代码:4. 完整代码

# -*- coding: utf-8 -*-
from openpyxl import Workbook
from openpyxl.styles import Font
import os


def create_template():
    # 创建新工作簿
    wb = Workbook()
    ws = wb.active

    # ====== 设置表头 ======
    headers = ["客户名称", "产品名称", "金额", "签约日期"]
    ws.append(headers)

    # 表头格式设置
    header_font = Font(bold=True, color="FF0000")  # 红色加粗
    for cell in ws[1]:
        cell.font = header_font

    # ====== 添加示例数据 ======
    sample_data = ["客户A", "笔记本电脑", "金额", "2025年5月20日"]
    ws.append(sample_data)

    # ====== 调整列宽 ======
    column_widths = {'A': 20, 'B': 25, 'C': 15, 'D': 12}
    for col, width in column_widths.items():
        ws.column_dimensions[col].width = width

    # ====== 保存文件 ======
    output_dir = r"C:\Users\ZHAOY\PycharmProjects\1\整理后的文件\文档"
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)

    file_path = os.path.join(output_dir, "完整合同模板.xlsx")

    # 处理文件已存在的情况
    if os.path.exists(file_path):
        overwrite = input("文件已存在,是否覆盖?(y/n): ")
        if overwrite.lower() != 'y':
            print("操作已取消")
            return

    wb.save(file_path)
    print(f"模板已生成至:{os.path.abspath(file_path)}")


if __name__ == "__main__":
    create_template()

如图:
在这里插入图片描述
自定义修改

修改表头(示例)
headers = [“客户名称”, “商品型号”, “单价”, “数量”, “总价”]

修改列宽(示例)
column_widths = {‘A’: 25, ‘B’: 30, ‘C’: 15, ‘D’: 10, ‘E’: 15}

#修改输出文件名
file_path = os.path.join(output_dir, “新版合同模板.xlsx”)

(2)阶段二高级版:批量生成培训机构学员合同(Word版)

1、素材准备
学员合同模板.docx 内容:
在这里插入图片描述
2、学员数据.csv
⚠️注意:此文件格式有多种,保存不正确会报错。有两种,编码,utf-8、GBK。如果报错脚本里就改成另一种编码。
在这里插入图片描述

💻 代码:基础读取

# -*- coding: utf-8 -*-
from docx import Document
import csv

def replace_text(paragraph, old_text, new_text):
    """精准替换段落文字"""
    if old_text in paragraph.text:
        inline = paragraph.runs
        for item in inline:
            if old_text in item.text:
                item.text = item.text.replace(old_text, new_text)

# 读取数据
with open(r'C:\Users\ZHAOY\PycharmProjects\1\整理后的文件\文档\学员数据.csv', encoding='GBK') as f:
    reader = csv.DictReader(f)
    for row in reader:
        # 加载模板
        doc = Document(r"C:\Users\ZHAOY\PycharmProjects\1\整理后的文件\文档\学员合同模板.docx")

        # 遍历所有段落
        for para in doc.paragraphs:
            replace_text(para, '{机构名称}', "xx教育集团")
            replace_text(para, '{学员姓名}', row['学员姓名'])
            replace_text(para, '{课程名称}', row['课程名称'])
            replace_text(para, '{学费}', row['学费'])

        # 保存文件
        doc.save(f"{row['学员姓名']}_培训合同.docx")
print("学员合同生成完毕!")

如图:
在这里插入图片描述

⏰编码问题报错如图:有两种,编码,utf-8、GBK。如果报错脚本里就改成另一种编码。

在这里插入图片描述

💡 扩展性:朋友们!可通过修改模板文件添加公司LOGO、联系方式等固定内容。
💡 调试技巧:先测试单个文档生成,再扩展为批量处理
💡在评论区告诉我,下期教你用Python搞定!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术职场教练

您的是我坚持原创免费作品的不懈

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值