乐于分享
好东西不私藏

第七期:Word文档自动化——告别重复性文档工作

第七期:Word文档自动化——告别重复性文档工作

一、python-docx库介绍

python-docxPython中处理Word文档的主要库,它可以创建、读取和修改docx格式的Word文档。python-docx支持处理Word文档的各种元素,包括段落、标题、列表、表格、图片、样式、页眉页脚等。虽然它不能处理doc格式的旧版Word文档,但考虑到docx已经成为主流格式,这个限制影响不大。

安装python-docx同样简单,执行pip install python-docx即可。使用python-docx的基本流程与openpyxl类似:创建或打开文档(Document),添加或修改内容(段落、表格等),保存文档。python-docxAPI设计直观易用,如document.add_paragraph()添加段落,document.add_table()添加表格,document.add_heading()添加标题等。

二、批量生成文档

批量生成文档是Word自动化最常见的应用场景。在企业中,经常需要生成大量格式相似的文档,如合同、证书、通知信、邀请函等。这些文档的主体内容相同,只是部分信息需要替换,如姓名、日期、金额等。如果手动创建这些文档,需要反复复制粘贴、查找替换,效率低下且容易出错。

以下是一个批量生成邀请函的完整示例:

┌────────────────────────────────────────────────────────────┐

│ from docx import Document

│ from datetime import datetime

│ def create_invitation(template_path, output_folder, guest_list):│

“””批量生成邀请函“””

for guest in guest_list:

加载模板

doc = Document(template_path)

替换占位符

for paragraph in doc.paragraphs:

if “{{姓名}}” in paragraph.text:

paragraph.text = paragraph.text.replace(“{{姓名}}”, guest[“name”])│

if “{{日期}}” in paragraph.text:

paragraph.text = paragraph.text.replace(“{{日期}}”, guest[“date”])│

if “{{地点}}” in paragraph.text:

paragraph.text = paragraph.text.replace(“{{地点}}”, guest[“location”])│

保存文档

output_path = f”{output_folder}/邀请函_{guest[‘name’]}.docx”│

doc.save(output_path)

print(f”已生成: {output_path}”)

│ # 使用示例

│ guests = [

{“name”: “张三“, “date”: “2024315“, “location”: “北京国际会议中心“},│

{“name”: “李四“, “date”: “2024315“, “location”: “北京国际会议中心“},│

{“name”: “王五“, “date”: “2024315“, “location”: “北京国际会议中心“}│

│ ]

│ create_invitation(“邀请函模板.docx”, “./output”, guests)

└────────────────────────────────────────────────────────────┘

三、模板填充技术

模板填充是Word文档自动化的核心技术。python-docx本身不提供模板引擎功能,但可以通过几种方式实现模板填充。最简单的方式是使用字符串替换:遍历文档中的所有段落,查找占位符并替换为实际值。这种方式简单直接,但需要注意占位符可能被Word拆分成多个运行(Run),导致替换失败。

更可靠的方式是使用docxtpl库,它是python-docx的扩展,提供了类似Jinja2的模板语法。使用docxtpl,可以在Word文档中使用{{变量名}}{% for %}等模板语法,然后在Python代码中传入上下文数据,自动渲染生成文档。这种方式更加灵活强大,支持循环、条件判断等复杂逻辑,适合处理复杂的文档生成需求。以下是一个使用docxtpl的示例:

┌────────────────────────────────────────────────────────────┐

│ from docxtpl import DocxTemplate

│ def generate_contract(template_path, output_path, context):│

“””使用docxtpl生成合同文档“””

加载模板

doc = DocxTemplate(template_path)

渲染模板

doc.render(context)

保存文档

doc.save(output_path)

print(f”合同已生成: {output_path}”)

│ # 使用示例

│ contract_context = {

“contract_id”: “HT2024001”,

“party_a”: “甲方公司名称“,

“party_b”: “乙方公司名称“,

“amount”: “100000”,

“sign_date”: “202431“,

“items”: [

{“name”: “服务项目一“, “price”: “50000”},

{“name”: “服务项目二“, “price”: “50000”}

]

│ }

│ generate_contract(“合同模板.docx”, “合同_HT2024001.docx”, contract_context)│

└────────────────────────────────────────────────────────────┘

四、文档格式化技巧

python-docx提供了丰富的文档格式化功能。在段落级别,可以设置对齐方式、行间距、段前段后间距、首行缩进等。在文字级别,可以设置字体、字号、颜色、加粗、斜体、下划线等。通过合理使用这些格式化功能,可以生成专业美观的文档。以下是一个创建格式化报告的示例:

┌────────────────────────────────────────────────────────────┐

│ from docx import Document

│ from docx.shared import Pt, Inches, RGBColor

│ from docx.enum.text import WD_ALIGN_PARAGRAPH

│ def create_formatted_report(title, content, output_path): │

“””创建格式化的报告文档“””

doc = Document()

添加标题

heading = doc.add_heading(title, level=0)

heading.alignment = WD_ALIGN_PARAGRAPH.CENTER

添加正文段落

for para_text in content:

para = doc.add_paragraph()

para.paragraph_format.first_line_indent = Inches(0.3)│

para.paragraph_format.line_spacing = 1.5

run = para.add_run(para_text)

run.font.name = “宋体

run.font.size = Pt(12)

添加表格

table = doc.add_table(rows=3, cols=3)

table.style = “Table Grid”

headers = [“项目“, “数量“, “金额“]

for i, header in enumerate(headers):

cell = table.rows[0].cells[i]

cell.text = header

cell.paragraphs[0].runs[0].font.bold = True

doc.save(output_path)

print(f”报告已生成: {output_path}”)

│ # 使用示例

│ create_formatted_report(“月度工作报告“, [“本月工作总结…”, “下月工作计划…”], “工作报告.docx”)│

└────────────────────────────────────────────────────────────┘

本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » 第七期:Word文档自动化——告别重复性文档工作

评论 抢沙发

9 + 9 =
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
×
订阅图标按钮