乐于分享
好东西不私藏

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

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

一、python-docx库介绍

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

安装python-docx同样简单,执行pip install python-docx即可。使用python-docx的基本流程与openpyxl类似:创建或打开文档(Document),添加或修改内容(段落、表格等),保存文档。python-docx的API设计直观易用,如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”: “2024年3月15日“, “location”: “北京国际会议中心“},│

│{“name”: “李四“, “date”: “2024年3月15日“, “location”: “北京国际会议中心“},│

│{“name”: “王五“, “date”: “2024年3月15日“, “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”: “2024年3月1日“,│

│“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 =
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
×
订阅图标按钮