在日常工作中,我们经常需要处理大量的 Word 和 PowerPoint 文件,例如批量生成报告、更新 PPT 内容等。手动操作不仅效率低下,还容易出错。今天,我们就来学习如何使用 Python 操作 Word 和 PowerPoint 文件,实现自动化办公,告别重复劳动。 这也是“Python - 100天从新手到大师”系列的第二十六天内容,让我们一起进步!
底层原理深度剖析:python-docx 与 python-pptx
要使用 Python 操作 Word 和 PowerPoint 文件,我们需要借助两个强大的第三方库:python-docx 和 python-pptx。
python-docx
python-docx 库允许我们创建、修改 Word .docx 文件。它的底层原理是解析和修改 Word 文档的 XML 结构。.docx 文件本质上是一个 ZIP 压缩包,其中包含了描述文档内容、格式等信息的 XML 文件。python-docx 库提供了一系列 API,让我们能够方便地访问和修改这些 XML 文件,从而实现对 Word 文档的各种操作。
当我们使用 python-docx 创建一个新的 Word 文档时,实际上是创建了一组预定义的 XML 结构,然后我们可以通过 API 添加段落、标题、表格、图片等元素,并设置它们的格式。当我们修改一个现有的 Word 文档时,python-docx 会解析文档的 XML 结构,然后我们可以通过 API 修改已有的元素或添加新的元素。
python-pptx
与 python-docx 类似,python-pptx 库也允许我们创建、修改 PowerPoint .pptx 文件。.pptx 文件也是一个 ZIP 压缩包,其中包含了描述幻灯片内容、格式等信息的 XML 文件。python-pptx 库提供了一系列 API,让我们能够方便地访问和修改这些 XML 文件,从而实现对 PowerPoint 文档的各种操作。
需要注意的是,这两个库都依赖于 lxml 库,因此在安装 python-docx 或 python-pptx 之前,需要先安装 lxml 库。
具体代码解决方案
使用 python-docx 操作 Word 文件
- 安装 python-docx 库
pip install python-docx
- 创建 Word 文档
from docx import Document
document = Document() # 创建一个新的 Word 文档
document.add_heading('Document Title', 0) # 添加标题,级别为 0
p = document.add_paragraph('A plain paragraph having some ') # 添加段落
p.add_run('bold').bold = True # 添加粗体文本
p.add_run(' and some ') # 添加普通文本
p.add_run('italic.').italic = True # 添加斜体文本
document.add_heading('Heading, level 1', level=1) # 添加一级标题
document.add_paragraph('Intense quote', style='Intense Quote') # 添加引用
document.add_paragraph(
'first item in unordered list', style='List Bullet' # 添加无序列表
)
document.add_paragraph(
'first item in ordered list', style='List Number' # 添加有序列表
)
document.add_picture('image.png', width=Inches(1.25)) # 添加图片,需要先准备一张名为 image.png 的图片
table = document.add_table(rows=1, cols=3) # 添加表格,1 行 3 列
hdr_cells = table.rows[0].cells # 获取表头单元格
hdr_cells[0].text = 'Qty'
hdr_cells[1].text = 'Id'
hdr_cells[2].text = 'Desc'
for i in range(10):
row_cells = table.add_row().cells # 添加一行
row_cells[0].text = str(i)
row_cells[1].text = '00' + str(i)
row_cells[2].text = 'test'
document.add_page_break() # 添加分页符
document.save('demo.docx') # 保存文档
- 修改 Word 文档
from docx import Document
document = Document('demo.docx') # 打开一个已存在的 Word 文档
for paragraph in document.paragraphs:
if 'bold' in paragraph.text:
paragraph.text = paragraph.text.replace('bold', 'very bold') # 替换文本
document.save('demo_modified.docx') # 保存修改后的文档
使用 python-pptx 操作 PowerPoint 文件
- 安装 python-pptx 库
pip install python-pptx
- 创建 PowerPoint 文档
from pptx import Presentation
from pptx.util import Inches
prs = Presentation() # 创建一个新的 PowerPoint 文档
title_slide_layout = prs.slide_layouts[0] # 获取标题幻灯片布局
slide = prs.slides.add_slide(title_slide_layout) # 添加一个幻灯片
title = slide.shapes.title # 获取标题
subtitle = slide.placeholders[1] # 获取副标题
title.text = 'Hello, World!' # 设置标题文本
subtitle.text = 'python-pptx was here!' # 设置副标题文本
bullet_slide_layout = prs.slide_layouts[1] # 获取项目符号幻灯片布局
slide = prs.slides.add_slide(bullet_slide_layout) # 添加一个幻灯片
title = slide.shapes.title # 获取标题
body_shape = slide.shapes.placeholders[1] # 获取文本框
tf = body_shape.text_frame # 获取文本框的文本框架
title.text = 'Adding a bullet slide' # 设置标题文本
tf.text = 'Find the bullet slide layout' # 添加第一行文本
p = tf.add_paragraph() # 添加一个段落
p.text = 'Use _TextFrame.text for first bullet' # 设置第二行文本
p = tf.add_paragraph() # 添加一个段落
p.text = 'Add more bullets using _TextFrame.add_paragraph()' # 设置第三行文本
left = top = width = height = Inches(1) # 设置图片的位置和大小
pic = slide.shapes.add_picture('image.png', left, top, width=width, height=height) # 添加图片,需要先准备一张名为 image.png 的图片
prs.save('demo.pptx') # 保存文档
- 修改 PowerPoint 文档
from pptx import Presentation
prs = Presentation('demo.pptx') # 打开一个已存在的 PowerPoint 文档
for slide in prs.slides:
for shape in slide.shapes:
if shape.has_text_frame:
if 'Hello' in shape.text_frame.text:
shape.text_frame.text = shape.text_frame.text.replace('Hello', 'Goodbye') # 替换文本
prs.save('demo_modified.pptx') # 保存修改后的文档
实战避坑经验总结
编码问题:在使用
python-docx和python-pptx处理中文文本时,可能会遇到编码问题。建议在代码中使用utf-8编码,并在读取和写入文件时指定编码方式。
字体问题:在设置文本格式时,需要注意字体问题。如果使用的字体在目标系统上不存在,可能会导致显示异常。建议使用常见的字体,或者在文档中嵌入字体。
图片问题:在添加图片时,需要注意图片的大小和格式。如果图片太大,可能会导致文档过大。如果图片格式不支持,可能会导致显示异常。建议使用合适的图片大小和格式。

依赖包版本问题: 在某些环境下,
python-docx与lxml的版本兼容性可能存在问题。如果遇到ImportError或lxml相关的错误,尝试升级或降级lxml包。PPT 模板: 对于复杂的 PPT 格式,从零开始创建比较困难。可以先手动创建一个 PPT 模板,然后使用
python-pptx读取并修改这个模板,这样可以大大提高效率。性能优化: 当处理大量 Word 或 PPT 文件时,性能可能成为瓶颈。可以考虑使用多线程或多进程来加速处理过程,或者使用更高效的库(例如,直接操作 XML 文件)。同时,合理使用缓存也能有效提升性能。例如,对于多次使用的样式或布局,可以先缓存起来,避免重复创建。
掌握了 Python 操作 Word 和 PowerPoint 文件的方法,我们可以将它们应用于各种实际场景中,例如自动化生成报告、批量更新 PPT 内容、数据分析可视化等。希望今天的分享对大家有所帮助,让我们一起用 Python 提升工作效率!
冠军资讯
代码旅行家