用Python操作PPT的办公自动化教程

本文介绍了如何使用Python操作PowerPoint(PPT),包括从PPT中提取内容、添加文本框和图形,以及自动化处理大量数据如Word转PPT。重点讲解了Python-pptx库的使用和模板编辑,展示了如何利用编程快速完成PPT设计任务。
摘要由CSDN通过智能技术生成

PPT通过其精美的可视化技巧以及良好的演示效果,成为了职场人士的必备技能。PPT的设计是一门大学问,无论是设计技巧,还是操作方法,都衍生出了专门的课程。

主要介绍Python操作PPT的技巧,**编程的优势在于处理速度,对于高大上的PPT设计,还是需要"以人为本,**所以该模块的使用场景主要是PPT基本元素的提取和添加,适合大量内容的转化,比如word转PPT, 减少大量繁琐的人工操作,尽管提供了一些基本的样式设计,但是满足日常办公对PPT美观性的要求上还是差点意思。

安装模块

Windows用户打开命令行输入:pip install python-pptx

Mac用户打开终端/Terminal输入:pip3 install python-pptx

使用windows系统,如果出现无法安装情况,可以在cmd模式下输入网址选择国内清华镜像。

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple python-pptx

导入模块:import pptx

参考文档地址:https://python-pptx.readthedocs.io/en/latest/index.html

PPT的基本结构介绍

在该模块中,将ppt拆分为了以下多个元素

  1. presentations, 表示整个ppt文档

  2. sliders. 表示ppt文档的每一页

  3. shapes 方框,在每页幻灯片内插入的方框,可以是形状,也可以是文本框

  4. Run 文字块 一般为较少字符

  5. Paragraph 段落,即Shape中的每一段内容,都称为一个段落

基本使用:

from pptx import Presentation  
from pptx.enum.shapes import MSO_SHAPE  
from pptx.util import Inches, Pt, Cm  
   
prs = Presentation()    #默认模板  
   
prs = Presentation(mypath)    #使用自己定义的模板  
  

获取PPT内容

from pptx import Presentation  
from pptx.util import Inches  
# 1. 得到幻灯片对象  
prs = Presentation("demo.pptx")  
# 2. 获取prs对象中的每一页PPT  
for slide in prs.slides:  
  # 3. 遍历获取每页PPT中的内容  
    for shape in slide.shapes:   
      # 4. 打印具体的Shape  
        print(shape)  
     # 5. 我是一条华丽的分割线,划分不同的slide  
    print("——————————————————————————")  

输出结果:

如果想获取每个Shape里面的文字也可以:

shape.has_text_frame ----->是否有文字 shape.text_frame ----->获取文字框

from pptx import Presentation  
from pptx.util import Inches  
# 1. 得到幻灯片对象  
prs = Presentation("demo.pptx")  
# 2. 获取prs对象中的每一页PPT  
for slide in prs.slides:  
  # 3. 遍历获取每页PPT中的内容  
    for shape in slide.shapes:   
      # 4. 判断是否存在文本  
        if shape.has_text_frame:  
          # 5. 如果存在则获取内容  
            text_frame = shape.text_frame  
            print(text_frame.text)  
     # 6. 我是一条华丽的分割线,划分不同的slide  
    print("——————————————————————————")      

输出的结果(对比前面的幻灯片):

从shape中找paragraph

from pptx import Presentation  
from pptx.util import Inches  
# 1. 得到幻灯片对象  
prs = Presentation("demo.pptx")  
# 2. 获取prs对象中的每一页PPT  
for slide in prs.slides:  
  # 3. 遍历获取每页PPT中的内容  
    for shape in slide.shapes:   
      # 4. 判断是否存在文本  
        if shape.has_text_frame:  
      # 5. 获取shape中的文本  
            text_frame = shape.text_frame  
            # 6. 获取text_frame中的段落内容  
            for paragraph in text_frame.paragraphs:  
              # 7. 打印段落内容  
               print(paragraph.text)  
               print('----------paragraph------------')  

综合应用

编写一个Python程序,要求

(1)打开demo.pptx

(2)按照paragraph分段,转换成为word文档

(3)保存为demo.docx

from pptx import Presentation  
from docx import Document  
  
doc = Document()  
prs = Presentation("婚礼策划师的最爱.pptx")  
ls = []  
for slide in prs.slides:  
 for shape in slide.shapes:  
  if shape.has_text_frame:  
   text_frame = shape.text_frame  
   for paragraph in text_frame.paragraphs:  
    if paragraph.text != '':  
     doc.add_paragraph(paragraph.text)  
  
doc.save("demo.docx")

向PPT写入内容

首先了解模板和占位符

Slides_layouts:版式,一个幻灯片母版由多个版式组成,索引从0开始。

Placeholder:占位符:存在PPT母版里面的幻灯片的某一部件:Placeholder

在创建一页ppt时,需要指定对应的布局,在该模块中, 内置了以下9种布局

  1. Title

  2. Title and Content

  3. Section Header

  4. Two Content

  5. Comparison

  6. Title Only

  7. Blank

  8. Content with Caption

  9. Picture with Caption

通过数字下标0到9来访问,指定布局添加一页ppt的用法如下:

创建placeholders

from pptx import Presentation  
  
prs = Presentation() #初始化一个空pptx文档  
slide = prs.slides.add_slide(prs.slide_layouts[0])  # 用第一个母版生成一页ppt  
for shape in slide.placeholders:         # 获取这一页所有的占位符  
    phf = shape.placeholder_format  
    print(f'{phf.idx}--{shape.name}--{phf.type}')  # id号--占位符形状名称-占位符的类型  
    shape.text = f'{phf.idx}--{shape.name}--{phf.type}'  
prs.save("new_template.pptx")  

也可以一次添加多个

from pptx import Presentation  
  
prs = Presentation() #初始化一个空pptx文档  
i = 0  
while i <= 10:  
    slide = prs.slides.add_slide(prs.slide_layouts[i])    
    i = i+1  
    for shape in slide.placeholders:         # 获取这一页所有的占位符  
        phf = shape.placeholder_format  
        print(f'{phf.idx}--{shape.name}--{phf.type}')  # id号--占位符形状名称-占位符的类型  
        shape.text = f'{phf.idx}--{shape.name}--{phf.type}'  
prs.save("new_template.pptx")  

向占位符中添加内容

主要使用:

shape.text = 字符串
prs.save(文件路径)
from pptx import Presentation  
  
prs = Presentation()  
# 用第一个母版生成一页ppt  
slide = prs.slides.add_slide(prs.slide_layouts[1])  
# 获取当前页的标题  
title_shape = slide.shapes.title  
# 向标题中添加文本  
title_shape.text = '宋宋的Python专栏'  
# 获取副标题  
subtitle = slide.shapes.placeholders[1]  
# 副标题中添加文本  
subtitle.text = '宋宋是一个爱美的大女生'  
  
# 副标题中添加新段落  
new_paragraph1 = subtitle.text_frame.add_paragraph()  
# 向段落中添加文本  
new_paragraph1.text = '我是一个专注学习技术的大女生'  
new_paragraph1.level = 1  
  
new_paragraph2 = subtitle.text_frame.add_paragraph()  
new_paragraph2.text = '我是一个认真写文章的大女生哈哈哈'  
new_paragraph2.level = 2  
  
# 保存内容  
prs.save("写入内容1.pptx")  

空白的PPT模板中添加文本框和图形

from pptx import Presentation  
from pptx.util import Cm,Pt,Inches  
from pptx.enum.shapes import MSO_SHAPE  
  
prs = Presentation('写入内容1.pptx')  
slide = prs.slides.add_slide(prs.slide_layouts[6]) # 6的layout中是一个空白的Slider,里面没有占位符  
  
# 单独向里面添加文本框和图片  
left = top = width = height =Cm(3)  # # left,top为相对位置,width,height为文本框大小。满足条件顺序是左>上>右>下  
text_box = slide.shapes.add_textbox(left,top,width,height)  
tf = text_box.text_frame  
tf.text = "欢迎来到宋宋的Python专栏"  
  
p = tf.add_paragraph()  
p.text = "宋宋的Python专栏,有20天学会Python基础,20天学会爬虫,20天学会数据分析,还有干活趣味文章!"  
p.font.bold = True  
p.font.size = Pt(15)  
  
# 添加图形  
  
slide1 = prs.slides.add_slide(prs.slide_layouts[6])   
shapes = slide1.shapes  
left = top = width = height = Inches(1.0)  
shape = shapes.add_shape(MSO_SHAPE.ROUNDED_RECTANGLE, left, top, width, height)  
  
prs.save("写入内容1_new.pptx")  

案例

现有一个公益捐书项目,有很多学生参与了本次活动,为了嘉奖这些学生,决定给每位学生发一张奖状。参与捐赠的学生名单和捐书数量都在students.xlsx中。

  1. 读取Excel中的数据

  2. 读取做好的PPT模板

  3. 将每位同学的姓名和捐书数量设置到PPT上

  4. 保存PPT

模版样式如下:

学生名单信息:

代码如下:

from pptx import Presentation  
from pptx.util import Cm,Pt,Inches  
from pptx.enum.shapes import MSO_SHAPE  
from datetime import datetime  
  
from openpyxl import load_workbook  
  
# 1. 加载cosmetics.xlsx表格  
workbook = load_workbook(filename= 'students.xlsx')  
# 2. 得到Sheet1工作簿  
sheet = workbook['Sheet1']  
  
# 按照行遍历,一行是一个人的信息  
for row in sheet.iter_rows(min_row=2, max_row=8, min_col= 1,max_col=2):  # 涵盖范围的所有单元格都会显示  
   
 prs = Presentation("模版.pptx")  
  
 # 2. 获取prs对象中的每一页PPT  
 for slide in prs.slides:  
   # 3. 遍历获取每页PPT中的内容  
  for shape in slide.shapes:   
    # 4. 判断是否存在文本  
   if shape.has_text_frame:  
       # 5. 获取shape中的文本  
    text_frame = shape.text_frame  
    # 6. 获取text_frame中的段落内容  
    for paragraph in text_frame.paragraphs:  
     paragraph.font.size = Pt(24)  
     # 7. 打印段落内容  
     if paragraph.text=='__':  
      paragraph.text=row[0].value  
     if paragraph.text=='__册':  
      paragraph.text=f'{row[1].value}册'  
     if paragraph.text=='日期:':  
      paragraph.font.size = Pt(18)  
      paragraph.text=str(datetime.now().strftime('%Y年%m月%d日'))  
 prs.save(f"模版_{row[0].value}.pptx")

学习资源推荐

除了上述,如果你也喜欢编程,想通过学习Python获取更高薪资,这里给大家分享一份Python学习资料。

😝朋友们如果有需要的话,可以V扫描下方二维码免费领取🆓

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

#### **一、Python学习路线**

image-20230619144606466

python学习路线图1

二、Python基础学习
1. 开发工具

2. 学习笔记

在这里插入图片描述

3. 学习视频

在这里插入图片描述

三、Python小白必备手册

图片

四、数据分析全套资源

在这里插入图片描述

五、Python面试集锦
1. 面试资料

在这里插入图片描述

在这里插入图片描述

2. 简历模板

在这里插入图片描述

** 因篇幅有限,仅展示部分资料,添加上方即可获取**
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值