最全总结 | 聊聊 Python 办公自动化之 PPT(上)

1. 前言

自动化办公,非 Python 莫属!

从本篇文章开始,我们继续聊聊自动化办公中另外一个常用系列:PPT

2. 准备一下

Python 操作 PPT 最强大的依赖库是:python-pptx

所以,在开始操作之前,我们需要在虚拟环境下安装这个依赖库

# 安装依赖
pip3 install python-pptx

3. PPT 结构

首先,我们需要了解一个 PPT 文档的页面结构

image

  • 一个 PPT 文档对应一个 Presentation 对象

  • 一个 Presentation 包含多个 Slide 对象,每一个 Slide 代表一个幻灯片

  • 每一张幻灯片的内容都是由各种形状 Shape 组成

其次,PPT 中的内容元素都是由各种形状构成

比如:文字框、图片、占位符、表格、普通形状等

通过翻看源码,发现他们都定义在 MSO_SHAPE_TYPE 类中

image

最后,我们需要了解一下 PPT 中的 版式模板

使用 Presentation 对象的 属性方法 slide_layouts 可以获取内置的 11 种母版样式

# 使用Presentation获取PPT内置的11种版式样式
# 版式索引从0开始
slide_layout = presentation.slide_layouts[slide_style_index]

他们分别是:

  • Title Slide 标题幻灯片

  • Title and Content 标题和内容幻灯片

  • Section Header 节标题幻灯片

  • Two Content 两栏内容幻灯片

  • Comparison 比较幻灯片

  • Title Only 仅标题的幻灯片

  • Blank 空白幻灯片

  • Content with Caption 内容和标题的幻灯片

  • Picture with Caption 图片和标题的幻灯片

  • Title and Vertical Text 标题和竖排内容

  • Vertical Title and Text 竖排标题和文本

当然,也可以在 Microsoft PPT / WPS 中查看对应母版的样式

这里补充一下,除了内置的版式样式,也可以通过占位符 PlaceHolder 去自定义母版,满足一些特定的场景需求

  1. 幻灯片管理

一个 PPT 文件是由一个或多张幻灯片组成

1-1 那如何添加一张一张幻灯片呢?

这里,只需要通过下面 3 个步骤

  • 实例化一个 Presentation 对象

  • 通过内置的版本样式,新建一个版本样式 Layout

  • 通过版本样式 Layout,添加一张幻灯片

def add_slide(presentation, slide_style_index):
    """
    在PPT文档中,以内置的版式添加幻灯片
    :param presentation:文档对象
    :param slide_style_index:版式索引
    :return:
    """
    # PPT版式样式
    # 内置有11种版式样式
    # 0:Title Slide 标题幻灯片
    # 1:Title and Content  标题和内容
    # 2:Section Header   节标题
    # 3:Two Content   两栏内容
    # 4:Comparison  比较
    # 5:Title Only  仅标题
    # 6:Blank  空白
    # 7:Content with Caption   内容和标题
    # 8:Picture with Caption   图片和标题
    # 9:Title and Vertical Text  标题和竖排内容
    # 10:Vertical Title and Text  竖排标题和文本
    slide_layout = presentation.slide_layouts[slide_style_index]

    # 通过样式Layout,新增一张幻灯片
    slide = presentation.slides.add_slide(slide_layout)

    return slide

# 1.1 新增幻灯片
slide1 = add_slide(self.presentation, 0)
slide2 = add_slide(self.presentation, 1)
slide3 = add_slide(self.presentation, 2)
slide4 = add_slide(self.presentation, 3)

1-2 获取已有的幻灯片或某一张幻灯片?

Presentation 对象的 slides 属性 会返回当前 PPT 文档中所有的幻灯片对象列表

def get_slides(presentation):
    """
    获取所有的幻灯片
    :param presentation:
    :return:
    """
    # 所有幻灯片
    slides = presentation.slides

    # 幻灯片数目
    slide_num = len(slides)

    return slides, slide_num


def get_slide(presentation, slide_index):
    """
    根据索引,获取某一个幻灯片
    :param presentation:
    :param slide_index:页面索引,从0开始
    :return:
    """
    slides, slide_num = get_slides(presentation=presentation)

    return slides[slide_index]

# 1.2.1 获取所幻灯片
slides, slide_num = get_slides(self.presentation)
print('现有幻灯片:', slides)
print('幻灯片数目:', slide_num)

# 1.2.2 获取某一个幻灯片
slide = get_slide(self.presentation, 1)
print(slide.shapes)

1-3 如果需要删除某一张幻灯片,如何破?

这个也简单,只需要先获取目前幻灯片对象,然后使用下面方法移除即可

def del_slide(presentation, slide_index=0):
    """
    删除某一张幻灯片
    :param presentation:
    :param slide_index: 索引
    :return:
    """
    # 所有幻灯片的列表
    slides = list(presentation.slides._sldIdLst)

    # 根据索引,删除某一张幻灯片
    presentation.slides._sldIdLst.remove(slides[slide_index])

# 1.3 根据索引,删除PPT文档中某一张幻灯片
# 比如:删除第4张幻灯片
del_slide(self.presentation, 3)

5. 文字及段落

我们首先需要指定一个幻灯片对象 Slide,它可以是已有的幻灯片,也可以是新建的一张幻灯片

接着,使用幻灯片对象的 slide.shapes 属性,获取当前幻灯片中的所有形状 Shape 组成的队列

最后利用形状队列的下面这个函数添加一个文本框,函数返回值为一个:文本框对象

add_textbox( left , top , width , height )

该函数参数分别为:

  • left 左边距

  • top 上边距

  • width 文字框宽度

  • height 文字框高度

这里需要引出另外一个概念:文字形状

PS:文字形状便于在文字框中添加段落和设置样式,通过「文本框对象」的属性函数 text_frame 获取

def insert_textbox(slide, left, top, width, height, unit=Inches):
    """
    幻灯片中添加文本框
    :param unit: 单元,默认设置为Inches
    :param slide: 幻灯片对象
    :param left: 左边距
    :param top:  上边距
    :param width: 宽度
    :param height: 高度
    :return:
    """
    # 文本框
    textbox = slide.shapes.add_textbox(left=unit(left),
                                       top=unit(top),
                                       width=unit(width),
                                       height=unit(height))
    # 文本框形状
    tf = textbox.text_frame

    return textbox, tf

为了便于使用,我对幻灯片中插入文字框这一动作进行了一次封装

长度单位默认设置为:Inches,也可以自定义为厘米等单位

接下来,我们来操作文字框及段落的常见操作

1-1 插入文本框,并设置默认段落内容

插入文本框的同时,文本框形状对象会自带一个段落,可以对这个段落设置内容

# 2、往幻灯片中插入一个文本框,返回一个文本框对象和一个文本框形状对象
textbox, tf = insert_textbox(slide, 8, 2, 10, 4, unit=Cm)

# 2.1 默认的段落
paragraph_default = tf.paragraphs[0]
paragraph_default.text = "设置段落默认的内容"

1-2 文本框中新增一个段落

查看源码发现,文本框形状对象是 TextFrame 的子类,因此可以使用 TextFrame 类中的 add_paragraph() 函数添加一个新的段落

# 2.2 添加一个新的段落
paragraph_new = tf.add_paragraph()

# 2.3 给段落设置内容
paragraph_new.text = "欢迎关注公众号:AirPython\n每周分享 Python 原创技术干货!"

1-3 设置段落及文字样式

和 Word 一样,使用 python-pptx 同样可以设置 PPT 文档的段落样式

其中

对齐方式:对齐方式是针对段落的,只需要指定段落对象的 alignment 的属性值即可

def set_parg_font_style(paragraph, font_name=None, font_color=None, font_size=-1, font_bold=False, font_italic=False,
                        paragraph_alignment=PP_ALIGN.CENTER):
    """
    设置段落中文本的样式,包含:字体名称、颜色、大小、是否加粗、是否斜体
    :param paragraph_alignment: 段落对齐方式
    :param paragraph:
    :param font_name:
    :param font_color:
    :param font_size:
    :param font_bold:
    :param font_italic:
    :return:
    """

    # 对齐方式
    # 注意:对齐方式是针对段落的
    paragraph.alignment = paragraph_alignment

    # 获取段落中字体对象
    font = paragraph.font

    # 设置字体样式
    set_font_style(font, font_name, font_color, font_size, font_bold, font_italic)

    return font

段落文字属性:使用段落对象的 font 属性获取字体对象,接着设置字体名称、大小、颜色、是否斜体、加粗

def set_font_style(font, font_name=None, font_color=None, font_size=-1, font_bold=False, font_italic=False):
    """
    设置字体样式
    :param font:
    :param font_name:
    :param font_color:
    :param font_size:
    :param font_bold:
    :param font_italic:
    :return:
    """
    # 字体名称
    if font_name:
        font.name = font_name

    # 字体颜色
    if font_color and len(font_color) == 3:
        font.color.rgb = RGBColor(font_color[0], font_color[1], font_color[2])

    # 字体大小
    if font_size != -1:
        font.size = Pt(font_size)

    # 是否加粗,默认不加粗
    font.bold = font_bold

    # 是否倾斜,默认不倾斜
    font.italic = font_italic

1-4 设置文字框的背景颜色

设置文字框背景颜色只需要 2 步

  • 将形状的填充类型设置为纯色

  • 设置文字框的背景颜色

def set_widget_bg(widget, bg_rgb_color=None):
    """
    设置【文本框textbox/单元格/形状】的背景颜色
    :param widget:文本框textbox、单元格、形状
    :param bg_rgb_color:背景颜色值
    :return:
    """
    if bg_rgb_color and len(bg_rgb_color) == 3:
        # 1、将形状填充类型设置为纯色
        widget.fill.solid()
        # 2、设置文本框的背景颜色
        widget.fill.fore_color.rgb = RGBColor(bg_rgb_color[0], bg_rgb_color[1], bg_rgb_color[2])

# 4、设置文字框的背景颜色
set_widget_bg(textbox, [0, 255, 0])

需要指出的是,该方法同样适用于设置表格单元格、普通形状的背景颜色

1-5 文本框的自动对齐

一旦文本框设置一段很长的文字,单行可能显示不完全

这时候,我们只需要设置文字形状的 word_wrap 值为 True,则可以让文本框的文字自动换行显示

# 5、设置文本框的文字自动对齐
tf.word_wrap = True

6. 最后

受限于篇幅,本篇文章仅聊到了 PPT 的结构、幻灯片管理、段落及文字;更多复杂操作、项目实战,会在后面的文章中进行说明

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

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

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

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

image-20230619144606466

python学习路线图1

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

2. 学习笔记

在这里插入图片描述

3. 学习视频

在这里插入图片描述

三、Python小白必备手册

图片

四、数据分析全套资源

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

2. 简历模板

在这里插入图片描述

** 因篇幅有限,仅展示部分资料,添加上方即可获取**
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
随着国家大数据战略的深入实施,各行业智慧化建设急需数据分析人才和智能应用人才。智慧化简单来说是一个以机器替换人力的过程,而机器的“灵魂”是程序。Python已经成为公认的驱动大数据智能应用的主流编程语言。Python程序设计的书籍已经琳琅满目,每一本书都凝聚了作者对Python的理解和对程序设计的认识,都是作者编程开发和教学经验的总结,都折射出作者的专业背景。由于大数据专业学生对程序设计的要求不是很高,但又需要具备一定的计算思维能力,熟悉用程序进行数据分析的一般流程,因此程序设计教材要言不甚深、文不甚俗,既要覆盖相关技术,又不能面面俱到,注重对问题的分析和解释,用程序表达算法。鉴于此,我们编写了本书。 本书每一章的标题都以Python开头,凸显Python在各个部分都有其独特的编程理念和方法。与其他高级编程语言如C、C++和Java等相比,Python在数据的表示、处理和可视化方面都有绝对的优势。有编程基础的学习者在学习Python时最好能忘掉以往程序设计语言的语法,彻底转变观念,以全新的姿态融入到Python的编程特点和规律之中。如变量定义、数据类型、数据结构、控制结构、类和对象、文件访问、数据分析和可视化,每一部分都有其特别之处,都值得我们重新认识,重新使用,重新熟悉。每一章开始的思维导图都是对本章技术脉络的梳理,开门见山地给学习者展示本章的知识和技术体系,以便学习者在学习过程中始终能保持思路清晰和整体把握。每一章开头的本章导读都是编者多年来程序开发与设计教学经验的提炼与升华,都是对程序设计的理解和感悟,值得学习者深入领会。每一章开头的本章要点都是要求学习者深入理解的重要知识和熟练掌握的关键技术。每一章的小结都是对本章要点的具体解释,供学习者复习查询。 本书为河北省高等教育教学改革研究与实践项目“新工科背景下警务大数据应用专业人才培养模式与教学实践研究”(编号:2018GJJG450)的阶段性成果。 下面是本书的体系结构图。 第1章Python编程初步。学习本章,要了解Python作为一种计算机程序设计脚本语言,结合了解释性、编译性和互动性的特点;了解在Linux和Windows中安装Python的方法;了解IDLE、PyCharm和Jupyter三种常用Python程序编辑环境。工欲善其事,必先利其器,通过对本章的学习,学习者可拥有一个强大的编程工具,从此开启数据分析编程之旅。 第2章Python语言基础。Python作为一门与计算机交流的编程语言,有着跟自然语言相似的特点:字、词、句、段落、篇章,以及相应的行文语法规则。学习本章,要理解程序行文的字词句,主要包括基本数据类型、常量和变量、运算符和表达式;理解程序的段落和篇章,主要包括常用内置函数、库函数和系统函数的使用;掌握程序的语法规则,主要包括常用的变量定义和标识符命名规则、语句组织成文编码规则等。这些都是程序设计的基础,学习者只有对此熟练掌握后,才能在后续的学习中得心应手。 第3章Python组合数据类型。组合数据类型是Python语言区别于其他高级编程语言的一大特色,通过组合数据类型,省去了其他语言各种复杂数据结构的设计,给编程人员带来了极大的方便,这也是Python流行于数据分析领域的原因之一。学习本章,要熟练掌握Python组合数据类型(列表、元组、字符串、字典、集合)的创建、访问和常见基本操作,以及序列解包功能。 第4章 Python控制结构。针对物质随时间由简单向复杂、由低级向高级发展的顺序,Python语言有相应的顺序结构语句;针对物质运动发展的条件性,Python语言有相应的选择结构语句;针对物质运动的波浪式前进螺旋式上升规律,Python语言有相应的循环结构语句。学习本章,要从马克思主义自然哲学视角理解Python语言在描述物质运动规律时的表达方式;掌握用Python语言描述常用算法,解决一些基本问题的方式。 第5章 Python函数与模块。有些经常用到的能实现特定功能的代码块,我们总是不希望每次用到时都重写一遍,甚至不希望复制一遍,但又想重复使用。Python里这些经常重用的代码块以函数(Function)的形式被定义,每一次复用被称为函数调用,计算机依然要执行重用的代码。学习本章,要理解函数的概念,掌握定义函数的方法,深刻理解函数调用中参数的传递(值传递、地址传递),理解变量的作用域(变量的作用范围或变量的生命周期),理解函数集合模块、包等概念,掌握模块和包的创建及使用方法。 第6章 Python面向对象程序设计。面向过程的程序设计方法难以保证程序的安全性和代码的可重用性,而面向对象的程序设计方法能够更好地提高大型程序的质量和开发效率,增强程序的安全性和提高代码的可重用性。学习本章,重在理解面向对象程序设计思想、类和对象的概念

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值