Appearance
2.2.Word文档自动化
在日常办公中,Word文档是最常用的文本处理工具之一。通过Python自动化Word文档操作,可以大幅提高工作效率,减少重复劳动,特别适合批量生成报告、合同、简历等标准化文档。本文将介绍几种常用的Python操作Word文档的方法,并提供实用的代码示例和应用场景。
使用python-docx操作Word文档
Python-docx是一个强大的库,可以用来创建、读取和修改Microsoft Word (.docx)文档。它提供了丰富的API来操作文档的各个方面,包括段落、表格、图片等。
安装python-docx
python
pip install python-docx
创建新的Word文档
python
from docx import Document
from docx.shared import Inches, Pt, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.style import WD_STYLE_TYPE
def create_simple_document():
"""创建一个简单的Word文档"""
# 创建文档对象
doc = Document()
# 添加标题
doc.add_heading('Python自动化办公指南', 0)
# 添加段落
p = doc.add_paragraph('使用 ')
p.add_run('python-docx').bold = True
p.add_run(' 可以轻松创建和修改Word文档,这对于')
p.add_run('自动化办公').italic = True
p.add_run('非常有用。')
# 添加一级标题
doc.add_heading('1. 文档基础', level=1)
# 添加带样式的段落
paragraph = doc.add_paragraph('这是一个普通段落,展示了如何添加文本内容。')
paragraph.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY
# 添加项目符号列表
doc.add_paragraph('项目符号列表示例:', style='List Bullet')
doc.add_paragraph('第一项', style='List Bullet')
doc.add_paragraph('第二项', style='List Bullet')
doc.add_paragraph('第三项', style='List Bullet')
# 添加编号列表
doc.add_paragraph('编号列表示例:', style='List Number')
doc.add_paragraph('第一步', style='List Number')
doc.add_paragraph('第二步', style='List Number')
doc.add_paragraph('第三步', style='List Number')
# 添加图片
doc.add_heading('2. 插入图片', level=1)
doc.add_paragraph('下面是一个图片示例:')
try:
doc.add_picture('example.png', width=Inches(4.0))
except:
doc.add_paragraph('(图片文件不存在,请替换为实际图片路径)')
# 添加表格
doc.add_heading('3. 创建表格', level=1)
doc.add_paragraph('下面是一个3x3表格示例:')
table = doc.add_table(rows=3, cols=3)
table.style = 'Table Grid'
# 填充表头
header_cells = table.rows[0].cells
header_cells[0].text = '姓名'
header_cells[1].text = '年龄'
header_cells[2].text = '职位'
# 填充数据行
data = [
['张三', '28', '工程师'],
['李四', '32', '设计师']
]
for i, row_data in enumerate(data):
row = table.rows[i+1].cells
for j, val in enumerate(row_data):
row[j].text = val
# 添加分页符
doc.add_page_break()
# 添加页眉和页脚
section = doc.sections[0]
header = section.header
header.paragraphs[0].text = "Python自动化办公 - 页眉示例"
header.paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER
footer = section.footer
footer_para = footer.paragraphs[0]
footer_para.text = "第 "
footer_para.add_run("PAGENUM").bold = True
footer_para.add_run(" 页")
footer_para.alignment = WD_ALIGN_PARAGRAPH.CENTER
# 保存文档
doc.save('简单文档示例.docx')
print("文档已创建: 简单文档示例.docx")
# 执行函数
create_simple_document()
修改现有Word文档
python
from docx import Document
from docx.shared import Pt
from docx.enum.text import WD_ALIGN_PARAGRAPH
def modify_existing_document(file_path):
"""修改现有Word文档"""
try:
# 打开现有文档
doc = Document(file_path)
# 修改文档标题(假设第一个段落是标题)
if doc.paragraphs:
title = doc.paragraphs[0]
title.text = "更新后的文档标题"
title.runs[0].bold = True
title.runs[0].font.size = Pt(18)
title.alignment = WD_ALIGN_PARAGRAPH.CENTER
# 在文档末尾添加新内容
doc.add_heading('新增章节', level=1)
doc.add_paragraph('这是修改文档后添加的新内容。')
# 修改表格内容(如果存在)
if doc.tables:
table = doc.tables[0] # 获取第一个表格
if len(table.rows) > 1 and len(table.rows[1].cells) > 0:
# 修改第二行第一列的内容
table.rows[1].cells[0].text = "更新的内容"
# 保存修改后的文档(可以选择另存为新文件)
modified_file = "修改后_" + file_path
doc.save(modified_file)
print(f"文档已修改并保存为: {modified_file}")
return True
except Exception as e:
print(f"修改文档时出错: {e}")
return False
# 使用示例
# modify_existing_document("简单文档示例.docx")
提取Word文档内容
python
from docx import Document
def extract_document_content(file_path):
"""提取Word文档中的内容"""
try:
# 打开文档
doc = Document(file_path)
# 提取所有段落文本
paragraphs_text = [para.text for para in doc.paragraphs if para.text]
print("\n文档段落内容:")
for i, text in enumerate(paragraphs_text, 1):
print(f"{i}. {text[:100]}{'...' if len(text) > 100 else ''}")
# 提取所有表格内容
tables_data = []
for i, table in enumerate(doc.tables):
print(f"\n表格 {i+1}:")
table_data = []
for row in table.rows:
row_data = [cell.text for cell in row.cells]
table_data.append(row_data)
print(" | ".join(row_data))
tables_data.append(table_data)
# 返回提取的内容
return {
"paragraphs": paragraphs_text,
"tables": tables_data
}
except Exception as e:
print(f"提取文档内容时出错: {e}")
return None
# 使用示例
# content = extract_document_content("简单文档示例.docx")
创建复杂格式文档
python
from docx import Document
from docx.shared import Inches, Pt, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH, WD_LINE_SPACING
from docx.enum.style import WD_STYLE_TYPE
from docx.oxml.ns import qn
from docx.oxml import OxmlElement
def create_complex_document():
"""创建具有复杂格式的Word文档"""
# 创建文档对象
doc = Document()
# 设置文档样式
styles = doc.styles
# 创建自定义标题样式
title_style = styles.add_style('CustomTitle', WD_STYLE_TYPE.PARAGRAPH)
title_font = title_style.font
title_font.name = '微软雅黑'
title_font.size = Pt(24)
title_font.bold = True
title_font.color.rgb = RGBColor(0, 112, 192) # 蓝色
# 添加标题
title = doc.add_paragraph("项目进度报告", style='CustomTitle')
title.alignment = WD_ALIGN_PARAGRAPH.CENTER
# 添加日期
from datetime import date
date_paragraph = doc.add_paragraph(f"日期: {date.today().strftime('%Y年%m月%d日')}")
date_paragraph.alignment = WD_ALIGN_PARAGRAPH.RIGHT
# 添加分隔线
p = doc.add_paragraph()
p.paragraph_format.line_spacing_rule = WD_LINE_SPACING.SINGLE
run = p.add_run("_" * 80)
run.font.color.rgb = RGBColor(192, 192, 192) # 浅灰色
# 添加项目概述
doc.add_heading("1. 项目概述", level=1)
doc.add_paragraph(
"本项目旨在开发一套自动化办公系统,提高企业内部文档处理效率。"
"系统将集成多种功能,包括文档生成、数据分析和报表输出等。"
)
# 添加项目进度表
doc.add_heading("2. 项目进度", level=1)
progress_table = doc.add_table(rows=1, cols=4)
progress_table.style = 'Table Grid'
# 设置表头
header_cells = progress_table.rows[0].cells
headers = ["阶段", "计划完成时间", "实际完成时间", "完成度"]
for i, header in enumerate(headers):
header_cells[i].text = header
# 设置表头背景色
shading_elm = OxmlElement('w:shd')
shading_elm.set(qn('w:fill'), "D9E1F2") # 浅蓝色背景
header_cells[i]._tc.get_or_add_tcPr().append(shading_elm)
# 添加数据行
progress_data = [
["需求分析", "2023-01-15", "2023-01-20", "100%"],
["系统设计", "2023-02-28", "2023-03-05", "100%"],
["开发阶段", "2023-05-30", "进行中", "65%"],
["测试阶段", "2023-06-30", "未开始", "0%"],
["部署上线", "2023-07-15", "未开始", "0%"]
]
for data_row in progress_data:
row_cells = progress_table.add_row().cells
for i, val in enumerate(data_row):
row_cells[i].text = val
# 调整表格宽度
for cell in progress_table.columns[0].cells:
cell.width = Inches(1.5)
for cell in progress_table.columns[3].cells:
cell.width = Inches(1.0)
# 添加风险评估
doc.add_heading("3. 风险评估", level=1)
# 添加带颜色的风险等级
risk_para = doc.add_paragraph("当前项目风险等级: ")
risk_run = risk_para.add_run("中等")
risk_run.font.color.rgb = RGBColor(255, 192, 0) # 橙色
risk_run.font.bold = True
# 添加风险列表
doc.add_paragraph("主要风险因素:", style='List Bullet')
risks = [
"技术实现难度超出预期",
"团队成员变动",
"需求变更频繁"
]
for risk in risks:
doc.add_paragraph(risk, style='List Bullet')
# 添加下一步计划
doc.add_heading("4. 下一步计划", level=1)
next_steps = [
"完成核心功能开发",
"开始内部测试",
"准备用户培训材料"
]
for i, step in enumerate(next_steps, 1):
doc.add_paragraph(f"{i}. {step}", style='List Number')
# 添加页脚
section = doc.sections[0]
footer = section.footer
footer_para = footer.paragraphs[0]
footer_para.text = "机密文件 - 仅供内部使用"
footer_para.alignment = WD_ALIGN_PARAGRAPH.CENTER
# 保存文档
doc.save('项目进度报告.docx')
print("复杂格式文档已创建: 项目进度报告.docx")
# 执行函数
# create_complex_document()
使用docx-mailmerge填充Word模板
Word模板是包含固定格式设置和版式设置的Word文件,通过模板文件,可以快速生成美观的Word文档,而不再需要重新设置各种样式的参数。docx-mailmerge库可以方便地将数据填充到Word模板中的占位符位置。
安装docx-mailmerge
python
pip install docx-mailmerge
创建Word模板
首先,需要在Word中创建一个包含合并域的模板文件。合并域是特殊的占位符,格式为«字段名»
。
在Word中创建合并域的步骤:
- 打开Word,创建新文档
- 点击「插入」选项卡
- 点击「快速部件」→「域」
- 在「域」对话框中,选择「MergeField」
- 在「域名称」中输入你的字段名(如「name」、「date」等)
- 点击「确定」
使用Python填充Word模板
python
from mailmerge import MailMerge
from datetime import date
def fill_word_template(template_path, output_path, data):
"""填充Word模板文件"""
try:
# 打开模板文件
document = MailMerge(template_path)
# 显示模板中的所有合并域
print("模板中的合并域:", document.get_merge_fields())
# 填充数据
document.merge(**data)
# 保存生成的文档
document.write(output_path)
print(f"已生成文档: {output_path}")
return True
except Exception as e:
print(f"填充模板时出错: {e}")
return False
# 使用示例 - 填充简单的信函模板
def generate_letter():
# 假设我们有一个名为"letter_template.docx"的模板,包含以下合并域:
# «recipient_name», «recipient_address», «date», «subject», «content», «sender_name», «sender_title»
# 准备数据
letter_data = {
'recipient_name': '张三',
'recipient_address': '北京市海淀区中关村南大街5号',
'date': date.today().strftime('%Y年%m月%d日'),
'subject': '项目合作邀请',
'content': '我们诚挚地邀请贵公司参与我们即将启动的人工智能项目合作。该项目旨在开发一套智能办公系统,提高企业运营效率。\n\n我们了解到贵公司在相关领域有丰富的经验,相信通过合作,我们可以共同创造更大的价值。\n\n期待您的回复。',
'sender_name': '李四',
'sender_title': '项目经理'
}
# 填充模板
fill_word_template('letter_template.docx', '项目合作邀请函.docx', letter_data)
# 使用示例 - 批量生成证书
def generate_certificates():
# 假设我们有一个名为"certificate_template.docx"的模板,包含以下合并域:
# «name», «course», «date», «instructor», «certificate_id»
# 准备多组数据
students = [
{
'name': '王小明',
'course': 'Python高级编程',
'date': '2023年6月15日',
'instructor': '张教授',
'certificate_id': 'CERT-2023-001'
},
{
'name': '李小红',
'course': 'Python高级编程',
'date': '2023年6月15日',
'instructor': '张教授',
'certificate_id': 'CERT-2023-002'
},
{
'name': '赵小青',
'course': 'Python高级编程',
'date': '2023年6月15日',
'instructor': '张教授',
'certificate_id': 'CERT-2023-003'
}
]
# 批量生成证书
for i, student in enumerate(students):
output_file = f"证书_{student['name']}.docx"
fill_word_template('certificate_template.docx', output_file, student)
# 执行函数
# generate_letter()
# generate_certificates()
处理表格和重复项
python
from mailmerge import MailMerge
def fill_template_with_tables():
"""填充包含表格和重复项的Word模板"""
# 假设我们有一个名为"report_template.docx"的模板
# 该模板包含普通合并域和表格中的合并域
# 打开模板
document = MailMerge('report_template.docx')
# 显示所有合并域
print("模板中的合并域:", document.get_merge_fields())
# 填充普通合并域
document.merge(
report_title='月度销售报告',
report_date='2023年7月1日',
prepared_by='市场部',
total_sales='¥1,234,567.00'
)
# 准备表格数据(假设模板中有一个表格,包含产品销售数据)
# 表格中的合并域格式为: «product:X», «quantity:X», «unit_price:X», «subtotal:X»
# 其中X是行索引
sales_data = [
{
'product': '笔记本电脑',
'quantity': '10',
'unit_price': '¥5,999.00',
'subtotal': '¥59,990.00'
},
{
'product': '办公椅',
'quantity': '20',
'unit_price': '¥899.00',
'subtotal': '¥17,980.00'
},
{
'product': '打印机',
'quantity': '5',
'unit_price': '¥1,299.00',
'subtotal': '¥6,495.00'
}
]
# 合并表格数据
document.merge_rows('product', sales_data)
# 保存生成的文档
document.write('月度销售报告.docx')
print("已生成报告: 月度销售报告.docx")
# 执行函数
# fill_template_with_tables()
实际应用场景
场景一:自动生成合同
python
from mailmerge import MailMerge
from datetime import date
import os
def generate_contract(contract_data, template_path, output_dir):
"""根据模板自动生成合同"""
# 确保输出目录存在
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# 合同文件名
contract_filename = f"合同_{contract_data['contract_id']}_{contract_data['client_name']}.docx"
output_path = os.path.join(output_dir, contract_filename)
try:
# 打开模板
document = MailMerge(template_path)
# 填充合同数据
document.merge(**contract_data)
# 保存生成的合同
document.write(output_path)
print(f"已生成合同: {contract_filename}")
return output_path
except Exception as e:
print(f"生成合同时出错: {e}")
return None
# 使用示例
def batch_generate_contracts():
# 合同模板路径
template_path = "contract_template.docx"
# 输出目录
output_dir = "generated_contracts"
# 准备多份合同数据
contracts = [
{
'contract_id': 'CT-2023-001',
'client_name': '北京科技有限公司',
'client_address': '北京市朝阳区建国路88号',
'client_representative': '王总',
'contract_date': date.today().strftime('%Y年%m月%d日'),
'start_date': '2023年8月1日',
'end_date': '2024年7月31日',
'contract_amount': '¥500,000.00',
'payment_terms': '分三期支付,首期款¥200,000.00,第二期款¥150,000.00,尾款¥150,000.00',
'service_scope': '软件开发、系统维护、技术支持',
'our_company': '智能科技有限公司',
'our_representative': '张总',
'our_address': '上海市浦东新区张江高科技园区'
},
{
'contract_id': 'CT-2023-002',
'client_name': '广州贸易有限公司',
'client_address': '广州市天河区珠江新城',
'client_representative': '李总',
'contract_date': date.today().strftime('%Y年%m月%d日'),
'start_date': '2023年9月1日',
'end_date': '2024年8月31日',
'contract_amount': '¥350,000.00',
'payment_terms': '分两期支付,首期款¥200,000.00,尾款¥150,000.00',
'service_scope': '系统集成、数据迁移、用户培训',
'our_company': '智能科技有限公司',
'our_representative': '张总',
'our_address': '上海市浦东新区张江高科技园区'
}
]
# 批量生成合同
generated_files = []
for contract_data in contracts:
contract_file = generate_contract(contract_data, template_path, output_dir)
if contract_file:
generated_files.append(contract_file)
print(f"共生成 {len(generated_files)} 份合同文件")
return generated_files
# 执行批量生成合同
# batch_generate_contracts()
场景二:自动生成个性化简历
python
from docx import Document
from docx.shared import Pt, Inches
from docx.enum.text import WD_ALIGN_PARAGRAPH
import os
def create_resume(person_data, output_path):
"""创建个性化简历"""
# 创建文档
doc = Document()
# 设置页边距
sections = doc.sections
for section in sections:
section.top_margin = Inches(0.8)
section.bottom_margin = Inches(0.8)
section.left_margin = Inches(0.8)
section.right_margin = Inches(0.8)
# 添加姓名作为标题
name = doc.add_heading(person_data['name'], 0)
name.alignment = WD_ALIGN_PARAGRAPH.CENTER
# 添加联系方式
contact_info = f"电话: {person_data['phone']} | 邮箱: {person_data['email']} | 地址: {person_data['address']}"
contact = doc.add_paragraph(contact_info)
contact.alignment = WD_ALIGN_PARAGRAPH.CENTER
# 添加分隔线
doc.add_paragraph('_' * 80)
# 添加个人简介
doc.add_heading('个人简介', level=1)
doc.add_paragraph(person_data['summary'])
# 添加教育背景
doc.add_heading('教育背景', level=1)
for edu in person_data['education']:
p = doc.add_paragraph()
p.add_run(f"{edu['school']} - {edu['degree']}").bold = True
p.add_run(f"\n{edu['date']}")
p.add_run(f"\n{edu['description']}")
# 添加工作经验
doc.add_heading('工作经验', level=1)
for job in person_data['experience']:
p = doc.add_paragraph()
p.add_run(f"{job['company']} - {job['position']}").bold = True
p.add_run(f"\n{job['date']}")
# 添加工作职责
doc.add_paragraph('职责:', style='List Bullet')
for responsibility in job['responsibilities']:
doc.add_paragraph(responsibility, style='List Bullet')
# 添加技能
doc.add_heading('技能', level=1)
for category, skills in person_data['skills'].items():
p = doc.add_paragraph()
p.add_run(f"{category}: ").bold = True
p.add_run(', '.join(skills))
# 保存文档
doc.save(output_path)
print(f"简历已生成: {output_path}")
return output_path
# 使用示例
def generate_sample_resume():
# 准备简历数据
resume_data = {
'name': '张三',
'phone': '138-1234-5678',
'email': 'zhangsan@example.com',
'address': '北京市海淀区',
'summary': '资深软件工程师,拥有8年Python开发经验,专注于数据分析和自动化系统开发。具有良好的团队协作能力和项目管理经验。',
'education': [
{
'school': '北京大学',
'degree': '计算机科学学士',
'date': '2010 - 2014',
'description': '主修计算机科学与技术,辅修数学。GPA 3.8/4.0。'
},
{
'school': '清华大学',
'degree': '软件工程硕士',
'date': '2014 - 2016',
'description': '研究方向:机器学习与数据挖掘。'
}
],
'experience': [
{
'company': 'ABC科技有限公司',
'position': '高级软件工程师',
'date': '2019 - 至今',
'responsibilities': [
'负责公司核心数据处理平台的设计和开发',
'优化数据处理流程,提高系统性能30%',
'带领5人团队完成多个重要项目',
'引入自动化测试,提高代码质量'
]
},
{
'company': 'XYZ信息技术公司',
'position': '软件工程师',
'date': '2016 - 2019',
'responsibilities': [
'参与开发企业级数据分析系统',
'设计并实现数据可视化模块',
'编写技术文档和用户手册',
'为新员工提供技术培训'
]
}
],
'skills': {
'编程语言': ['Python', 'Java', 'JavaScript', 'SQL'],
'框架与工具': ['Django', 'Flask', 'React', 'Docker', 'Git'],
'数据库': ['MySQL', 'MongoDB', 'Redis'],
'其他': ['数据分析', '机器学习', '项目管理', '团队协作']
}
}
# 生成简历
return create_resume(resume_data, '张三_个人简历.docx')
# 执行生成简历
# generate_sample_resume()
场景三:自动生成周报/月报
python
from docx import Document
from docx.shared import Pt, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from datetime import datetime, timedelta
import calendar
def generate_weekly_report(week_data, output_path):
"""生成周报"""
# 创建文档
doc = Document()
# 添加标题
title = doc.add_heading(f"{week_data['department']}周报", 0)
title.alignment = WD_ALIGN_PARAGRAPH.CENTER
# 添加报告期间
period = doc.add_paragraph(f"报告期间: {week_data['start_date']} 至 {week_data['end_date']}")
period.alignment = WD_ALIGN_PARAGRAPH.CENTER
# 添加报告人和日期
reporter = doc.add_paragraph(f"报告人: {week_data['reporter']}\t\t报告日期: {week_data['report_date']}")
reporter.alignment = WD_ALIGN_PARAGRAPH.RIGHT
# 添加分隔线
doc.add_paragraph('_' * 80)
# 本周工作总结
doc.add_heading('一、本周工作总结', level=1)
for i, task in enumerate(week_data['completed_tasks'], 1):
p = doc.add_paragraph(f"{i}. ", style='List Number')
p.add_run(task['name']).bold = True
p.add_run(f"\n 完成情况: {task['status']}")
p.add_run(f"\n 工作内容: {task['description']}")
# 下周工作计划
doc.add_heading('二、下周工作计划', level=1)
for i, task in enumerate(week_data['planned_tasks'], 1):
p = doc.add_paragraph(f"{i}. ", style='List Number')
p.add_run(task['name']).bold = True
p.add_run(f"\n 计划时间: {task['planned_time']}")
p.add_run(f"\n 工作内容: {task['description']}")
# 问题与建议
if week_data['issues']:
doc.add_heading('三、问题与建议', level=1)
for i, issue in enumerate(week_data['issues'], 1):
p = doc.add_paragraph(f"{i}. ", style='List Number')
p.add_run(issue['title']).bold = True
p.add_run(f"\n 问题描述: {issue['description']}")
if issue.get('solution'):
p.add_run(f"\n 解决方案: {issue['solution']}")
# 保存文档
doc.save(output_path)
print(f"周报已生成: {output_path}")
return output_path
# 使用示例
def create_sample_weekly_report():
# 计算上周的日期范围
today = datetime.now()
start_of_last_week = today - timedelta(days=today.weekday() + 7)
end_of_last_week = start_of_last_week + timedelta(days=6)
# 准备周报数据
week_data = {
'department': '技术部',
'start_date': start_of_last_week.strftime('%Y年%m月%d日'),
'end_date': end_of_last_week.strftime('%Y年%m月%d日'),
'reporter': '张三',
'report_date': today.strftime('%Y年%m月%d日'),
'completed_tasks': [
{
'name': '用户管理模块开发',
'status': '已完成',
'description': '完成了用户注册、登录、权限管理等功能的开发和单元测试。'
},
{
'name': '数据导入功能优化',
'status': '已完成',
'description': '优化了大数据量导入的性能,提高了处理速度约40%。'
},
{
'name': 'Bug修复',
'status': '进行中 (80%)',
'description': '修复了上周反馈的10个Bug中的8个,剩余2个正在处理中。'
}
],
'planned_tasks': [
{
'name': '完成剩余Bug修复',
'planned_time': '下周一至周二',
'description': '解决剩余的2个Bug,并进行回归测试。'
},
{
'name': '开始报表模块开发',
'planned_time': '下周三至周五',
'description': '设计并实现数据报表功能,包括数据统计和可视化展示。'
},
{
'name': '代码审查与重构',
'planned_time': '下周五',
'description': '对现有代码进行审查,优化代码结构和性能。'
}
],
'issues': [
{
'title': '性能问题',
'description': '在高并发情况下,系统响应速度明显下降。',
'solution': '计划通过引入缓存机制和优化数据库查询来解决。'
},
{
'title': '团队协作效率',
'description': '当前的代码版本管理流程较为复杂,影响开发效率。',
'solution': '建议简化Git工作流,并加强团队培训。'
}
]
}
# 生成周报
return generate_weekly_report(week_data, f"技术部周报_{week_data['start_date']}_{week_data['end_date']}.docx")
# 执行生成周报
# create_sample_weekly_report()
通过以上代码示例和应用场景,你可以轻松掌握Python Word文档自动化的各种技巧,大幅提高工作效率。无论是创建简单的文档,还是生成复杂的报告、合同或简历,Python都能帮你轻松应对。