Skip to content

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中创建合并域的步骤:

  1. 打开Word,创建新文档
  2. 点击「插入」选项卡
  3. 点击「快速部件」→「域」
  4. 在「域」对话框中,选择「MergeField」
  5. 在「域名称」中输入你的字段名(如「name」、「date」等)
  6. 点击「确定」

使用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都能帮你轻松应对。