一. 痛点
运维侠小白有下面烦恼,听说deepseek可以帮助提升学习python的效率,可是deepseek给的代码也报错,怎么办?
deepseek生成的代码也有可能报错,例如:
⏰执行报错:由提示得知,是少导入需要的模块,但是补全,还是报错,这就是deepseek的局限性。需要继续发问,才能解决。
完整解决报错后代码:
多尝试,困难才会被克服
学习就像追妹子,你只能看到背影,但只要坚持日积月累的付出,迟早她整个人属于你❤。
二.基础:准备工作
⚠️避免报错:
- 文件路径 没有写绝对路径默认是处理python代码所在路径的文件,因此需要把代码文件放到这个处理的文件同一文件夹里。
(1)安装 python-docx模块
💻 代码:在命令行终端执行
# 安装必要库(命令行执行)
# pip install python-docx
(2)基本构成:word文档的"四件套"结构
想象Excel就像一本老式账本:
📒 段落(paragraph):每个积木组合成的形状
📦表格(Cell):每个小格子
📚 图片(picture):账本里的照片
📄 样式(Sheet):衣服的种类,休闲服、婚礼正装等
结构示意图:
三.进阶:基础操作
⚠️避免报错:
- 文件路径 没有写绝对路径默认是处理python代码所在路径的文件,因此需要把代码文件放到这个处理的文件同一文件夹里。
- 修改部分代码 可以举一反三,这个也能生成合同第一页。
(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. 创建excel_房源数据完整代码
# -*- 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="000000") # 黑色加粗
for cell in ws[1]:
cell.font = header_font
# ====== 添加示例数据 ======
sample_data = ["王业主", "张先生", "朝阳区xx路1号", "2","6500"]
sample_data2 = ["王业主", "郑先生", "朝阳区xx路1号", "12","7500"]
ws.append(sample_data)
ws.append(sample_data2)
# ====== 调整列宽 ======
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、房源数据.xlsx
⚠️注意:格式可根据实际需要调整,但是列名称需要与代码保持一致。如果变更,代码列字段也要改。
💻 代码:
# -*- coding: utf-8 -*-
from docx import Document
from openpyxl import load_workbook
from datetime import datetime
from docx.text.paragraph import Paragraph # 关键导入
from docx.table import Table # 关键导入
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)
# 加载Excel数据
wb = load_workbook(r'C:\Users\ZHAOY\PycharmProjects\1\整理后的文件\文档\房源数据.xlsx')
ws = wb.active
for row in ws.iter_rows(min_row=2, values_only=True):
landlord, tenant, address, term, rent = row
doc = Document(r'C:\Users\ZHAOY\PycharmProjects\1\整理后的文件\文档\租赁合同模板.docx')
# 替换常规字段
replacements = {
'{房东姓名}': landlord,
'{租客姓名}': tenant,
'{房屋地址}': address,
'{租期}': str(term),
'{月租}': f"{rent}元"
}
# 替换特殊条款
today = datetime.now().strftime("%Y年%m月%d日")
replacements['{签约日期}'] = today
# 遍历所有段落和表格
for component in [*doc.paragraphs, *doc.tables]:
if isinstance(component, Paragraph): # 现在可以正确识别类
for key, value in replacements.items():
replace_text(component, key, value)
elif isinstance(component, Table):
for row in component.rows:
for cell in row.cells:
for para in cell.paragraphs:
for key, value in replacements.items():
replace_text(para, key, value)
doc.save(f"{address}_租赁合同.docx")
print("租赁合同生成完成!")
如图:
💡 扩展性:朋友们!可通过修改模板文件添加公司LOGO、联系方式等固定内容。
💡 调试技巧:先测试单个文档生成,再扩展为批量处理
💡在评论区告诉我,下期教你用Python搞定!