侧边栏壁纸
博主头像
phphi

phphi's blog

  • 累计撰写 51 篇文章
  • 累计收到 0 条评论

Day26 - Python操作Word和PowerPoint文件

2026-4-24 / 0 评论 / 1 阅读

Word 和 PowerPoint 文件操作

python-docx 操作 Word

pip install python-docx

创建 Word 文档

from docx import Document
from docx.shared import Cm, Pt

doc = Document()

# 标题
doc.add_heading('快快乐乐学Python', 0)  # 0级标题

# 段落(可加粗、下划线等)
p = doc.add_paragraph('Python是一门')
run = p.add_run('简单')
run.bold = True
run.font.size = Pt(18)
p.add_run('且')
run = p.add_run('优雅')
run.underline = True
p.add_run('的语言')

# 列表
doc.add_paragraph('第一项', style='List Bullet')      # 无序
doc.add_paragraph('第二项', style='List Number')      # 有序

# 表格
table = doc.add_table(rows=1, cols=3)
table.style = 'Light Grid Accent 1'
hdr = table.rows[0].cells
hdr[0].text = '姓名'
hdr[1].text = '年龄'
hdr[2].text = '城市'
table.add_row().cells[0].text = 'Alice'
table.add_row().cells[0].text = 'Bob'

# 图片
doc.add_picture('photo.jpg', width=Cm(5))

# 分页
doc.add_page_break()

doc.save('demo.docx')

读取 Word 文档

from docx import Document

doc = Document('demo.docx')

# 遍历段落
for p in doc.paragraphs:
    print(p.text)

# 遍历表格
for table in doc.tables:
    for row in table.rows:
        for cell in row.cells:
            print(cell.text)

批量生成文档(模板替换)

适合批量生成合同、证明等固定格式文档:

from docx import Document

employees = [
    {'name': '张三', 'id': '510***1995***001', 'company': 'A公司'},
    {'name': '李四', 'id': '510***1992***002', 'company': 'B公司'},
]

for emp in employees:
    doc = Document('模板.docx')
    for p in doc.paragraphs:
        for run in p.runs:
            if '{' in run.text:
                start, end = run.text.find('{'), run.text.find('}')
                key = run.text[start+1:end]
                if key in emp:
                    run.text = run.text.replace(f'{{{key}}}', emp[key])
    doc.save(f'{emp["name"]}_证明.docx')

python-pptx 操作 PowerPoint

pip install python-pptx

创建幻灯片

from pptx import Presentation

pres = Presentation()

# 添加幻灯片(选择布局模板)
slide_layout = pres.slide_layouts[0]  # 标题页
slide = pres.slides.add_slide(slide_layout)
slide.shapes.title.text = "欢迎学习Python"
slide.placeholders[1].text = "人生苦短,我用Python"

# 添加内容页
slide_layout = pres.slide_layouts[1]  # 标题+内容
slide = pres.slides.add_slide(slide_layout)
title = slide.shapes.title
title.text = "Python简介"
body = slide.placeholders[1].text_frame
body.text = "历史沿革"
p = body.add_paragraph("1991年诞生", level=1)
p = body.add_paragraph("Guido创建", level=2)

pres.save('demo.pptx')

总结

  • python-docx:创建/读取/修改 .docx 文件,支持标题、段落、列表、表格、图片
  • 模板替换:适合批量生成固定格式文档
  • python-pptx:创建幻灯片,设置标题、内容、层级
  • 两者都基于 XML 结构,无需安装 Office