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

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

1. 前言

作为办公自动化 PPT 系列篇的最后一篇文章,我们将 PPT 中的高级功能及常用点

前两篇

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

文章内容将覆盖:

  • 预设形状 Shape

  • 图表 Chart

  • 读取文字内容

  • 保存所有图片

2. 预设形状 Shape

实际上,PPT 文档的内容区就是由各类形状 Shape 组成,包含:图片、文本框、视频、表格、预设形状

其中,预设的普通形状也相当丰富,可以查看下面链接

image

使用下面的方法,可以向幻灯片中插入一个形状

slide.shapes.add_shape(autoshape_type_id, left, top, width, height)

参数分别是:

  • autoshape_type_id 形状类型

  • left 左边距

  • top 上边距

  • width 形状宽度

  • height 形状高度

我们以插入一个简单的圆角矩形框为例

2-1 插入形状

from pptx.enum.shapes import MSO_SHAPE, MSO_SHAPE_TYPE

def insert_shape(slide, left, top, width, height, autoshape_type_id=MSO_SHAPE.CHEVRON, unit=Inches):
    """
    幻灯片中添加形状
    :param unit: 单位,默认为Inches
    :param autoshape_type_id: 形状类型
    :param slide:幻灯片
    :param left:左边距
    :param top:上边距
    :param width:宽度
    :param height:高度
    :return:
    """
    # 添加一个形状
    # add_shape(self, autoshape_type_id, left, top, width, height)
    # 参数分别为:形状类型、左边距、上边距、宽度、高度
    shape = slide.shapes.add_shape(autoshape_type_id=autoshape_type_id,
                                   left=unit(left),
                                   top=unit(top),
                                   width=unit(width),
                                   height=unit(height))
    return shape

# 1、添加一个圆角矩形
rectangle = insert_shape(slide, 2, 2, 16, 8, autoshape_type_id=MSO_SHAPE.ROUNDED_RECTANGLE, unit=Cm)

2-2 设置形状属性

上面方法返回的形状对象 ,我们可以进一步设置它的背景颜色及边框属性

比如:设置背景色为白色;边框颜色为红色,宽度为 0.5 厘米

# 2、设置形状属性
# 2.1 背景颜色
set_widget_bg(rectangle, bg_rgb_color=[255, 255, 255])

# 2.2 边框属性
set_widget_frame(rectangle, frame_rgb_color=[255, 0, 0],frame_width=0.5)

更多形状可以参考下面链接

https://python-pptx.readthedocs.io/en/latest/api/enum/MsoAutoShapeType.html

3. 图表 Chart

图表 Chart 是 PPT 中使用很频繁的一块内容,使用 python-pptx 可以创建各种类型的图表,包含:柱状图、饼图、折线图、散点图、3D 图等

创建图表的方式如下:

slide.shapes.add_shape(autoshape_type_id, left, top, width, height)

参数分别是:

  • autoshape_type_id 图表样式

  • left 左边距

  • top 上边距

  • width 图表显示宽度

  • height 图表显示高度

3-1 创建一个折线图

首先,创建一个图表数据对象 ChartData

from pptx.chart.data import ChartData

slide = add_slide(self.presentation, 6)

# 创建一个图表数据对象
chart_data = ChartData()

接着,准备图表数据

# 数据类别(x轴数据)
chart_data.categories = [2000, 2005, 2010, 2015, 2020]

# 每一年各维度的数据(3个纬度)
# 经济
chart_data.add_series("经济", [60, 65, 75, 90, 95])

# 环境
chart_data.add_series("环境", [95, 88, 84, 70, 54])

# 文化
chart_data.add_series("军事",[40, 65, 80, 95, 98])

最后,指定图表类型为折线图 XL_CHART_TYPE.LINE,按照图表数据绘制图表

如果需要绘制其他图表,可以参考下面链接:

https://python-pptx.readthedocs.io/en/latest/api/enum/XlChartType.html

def insert_chart(slide, left, top, width, height, data, unit=Inches, chart_type=XL_CHART_TYPE.COLUMN_CLUSTERED):
    """
    插入图表
    :param slide: 幻灯片
    :param left: 左边距
    :param top: 上边距
    :param width: 宽度
    :param height: 高度
    :param data: 图表数据
    :param unit: 数据单位,默认为:Inches
    :param chart_type: 图表类型,默认是:柱状图
    :return:
    """
    chart_result = slide.shapes.add_chart(chart_type=chart_type,
                                          x=unit(left), y=unit(top),
                                          cx=unit(width), cy=unit(height),
                                          chart_data=data)
    # 返回图表
    return chart_result.chart

# 添加图表
chart = insert_chart(slide, 4, 5, 20, 9, chart_data, unit=Cm, chart_type=XL_CHART_TYPE.LINE)

3-2 设置图表显示属性

以设置图表图例、图表是否显示平滑、设置图表文字样式为例

# 设置图表显示属性
# 显示图例
chart.has_legend = True

# 图例是否在绘图区之外显示
chart.legend.include_in_layout = False

# 设置图表是否显示平滑
chart.series[0].smooth = True
chart.series[1].smooth = True
chart.series[2].smooth = True

# 设置图表中文字的样式
set_font_style(chart.font, font_size=12, font_color=[255, 0, 0])

最后生成的折线图效果图如下:

image

4. 读取内容

PPT 文档的内容区由各种 Shape 组成,并且 shape.has_text_frame 可用于判断形状内部是否包含文本框

因此,只需要遍历所有形状,就可以获取 PPT 中所有的文本内容

def read_ppt_content(presentation):
    """
    读取PPT中所有的内容
    :param presentation:
    :return:
    """
    # 所有内容
    results = []

    # 遍历所有幻灯片,获取文本框中的值
    for slide in presentation.slides:
        for shape in slide.shapes:
            # 判断形状是否包含文本框
            if shape.has_text_frame:
                content = get_shape_content(shape)
                if content:
                    results.append(content)

    return results

presentation = Presentation("./raw.pptx")

# 1、普通形状内容的所有文本内容
contents = read_ppt_content(presentation)
print(contents)

但是,对于图表 Table 单元格中的文本数据,没法利用这种方式获取到

我们只能过滤出形状类型为 TABLE 的形状,遍历表中所有行及单元格,获取文本数据

def read_ppt_file_table(self):
    """
    读取PPT中的数据
    :return:
    """
    # 打开待读取的ppt
    presentation = Presentation("./raw.pptx")for slide in presentation.slides:
        # 遍历素有形状
        # 形状:有内容的形状、无内容的形状
        for shape in slide.shapes:
            # print('当前形状名称:', shape.shape_type)
            # 只取表格中的数据,按照行读取内容
            if shape.shape_type == MSO_SHAPE_TYPE.TABLE:
                # 获取表格行(shape.table.rows)
                for row in shape.table.rows:
                    # 某一行所有的单元格(row.cells)
                    for cell in row.cells:
                        # 单元格文本框中的内容(cell.text_frame.text)
                        print(cell.text_frame.text)

5. 保存图片

有时候,我们需要将 PPT 文档中的所有图片保存到本地

只需要下面 3 步即可完成

  • 遍历幻灯片内容区所有形状

  • 过滤出形状类型为 MSO_SHAPE_TYPE.PICTURE 的图片形状,获取图片形状的二进制字节流

  • 将图片字节流写入到文件中

def save_ppt_images(presentation, output_path):
    """
     保存ppt中所有图片
    [Python批量导出PPT中的图片素材](https://www.pythonf.cn/read/49552)
    :param presentation:
    :param output_path 保存目录
    :return:
    """

    print('幻灯片数目:', len(presentation.slides))

    # 遍历所有幻灯片
    for index_slide, slide in enumerate(presentation.slides):
        # 遍历所有形状
        for index_shape, shape in enumerate(slide.shapes):
            # 形状包含:文字形状、图片、普通形状等

            # 过滤出图片形状
            if shape.shape_type == MSO_SHAPE_TYPE.PICTURE:
                # 获取图片二进制字符流
                image_data = shape.image.blob

                # image/jpeg、image/png等
                image_type_pre = shape.image.content_type

                # 图片后缀名
                image_suffix = image_type_pre.split('/')[1]

                # 创建image文件夹保存抽出图片
                if not os.path.exists(output_path):
                    os.makedirs(output_path)

                # 图片保存路径
                output_image_path = output_path + random_str(10) + "." + image_suffix

                print(output_image_path)

                # 写入到新的文件中
                with open(output_image_path, 'wb') as file:
                    file.write(image_data)

6. 最后

至此,Python 办公自动化 PPT 系列篇就正式结束了!在实际项目中,如果你有遇到其他问题,欢迎在评论区留言!

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

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

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

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

image-20230619144606466

python学习路线图1

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

2. 学习笔记

在这里插入图片描述

3. 学习视频

在这里插入图片描述

三、Python小白必备手册

图片

四、数据分析全套资源

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

2. 简历模板

在这里插入图片描述

** 因篇幅有限,仅展示部分资料,添加上方即可获取**
PPT动起来:用python-pptx轻松添加动画效果 除了单一动画,你还可以通过代码创建复杂的动画序列,比如先让一个元素飞入,然后高亮显示,最后淡出消失。这需要对枚举中的值进行组合,并通过分号分隔每个动画步骤。至此,你已经学会了如何使用为幻灯片元素添加动画效果。但这只是冰山一角,你还可以通过更深入地探索库来发现更多高级功能,例如创建自定义形状、应用主题和布局、插入多媒体内容等。随着你对库的了解加深,你将能够创建出更加复杂和专业的演示文稿。 阅读详情

相关推荐

办公自动化PPT格式课件

该资源为办公自动化课件,包括8章,为ppt格式,可供办公人员,学生学习!

Python自动化操作PPT,(非常详细)从零基础入门到精通,看完这一篇就够了

官方网址:http://seaborn.pydata.org/seaborn是基于Matplotlib的Python数据可视化库。它提供了一个高级界面,用于绘制引人入胜且内容丰富的统计图形只是在Matplotlib上进行了更高级的API封装,从而使作图更加容易seaborn是针对统计绘图的,能满足数据分析90%的绘图需求,需要复杂的自定义图形还需要使用到Matplotlib。

Javachichi的博客 6471

办公自动化(word+powerpoint+execl)课件

办公自动化(word+powerpoint+execl)课件

C# Powerpoint 禁止或允许修改形状

在设定形状属性后,可禁止对形状某些属性的编辑,以达到保护形状格式的目的。常用方法有:锁定形状禁止选择, 和禁止对形状的具体属性进行修改。前者保护形状的所有格式,无法选取,无法修改任何属性。后者,对形状的具体属性,例如形状大小,位置,类型,文本,旋转等,进行编辑限制,以达到保护形状某些属性的目的。

Eiceblue的专栏 2769

Python-pptx Shapes

image SlideShapes对象 SlideShapes对象是Slide的形状属性。class pptx.shapes.shapetree.SlideShapes 形状顺序出现在幻灯片上。 序列中的第一个形状是z顺序中的最后一个形状,最后一个形状是最顶部。 支持索引访问,len(),index()和迭代。 add_chart(chart_type,x,y,cx,cy,chart_...

Yohann丶blog 4226

python自动化生成ppt的实现代码

通过以上步骤,我们可以快速创建一个包含标题、子弹点、文本框、图片、自定义形状和表格的PPT文档。python-pptx库提供了丰富的功能,可以满足我们大部分的演示文稿制作需求。以上就是使用python-pptx库进行PPT文档自动化处理的简介。希望这篇文章能帮助你提高工作效率。添加带有子弹点的幻灯片。

Oona_01的博客 479

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

点击上方 “AirPython”,选择 “加为星标”第一时间关注 Python 技术干货!1. 前言上一篇文章简单地介绍了 PPT 的文档结构,并使用 python-pptx 这个依赖库...

AirPython的博客 1207

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

聊聊 Python 数据处理全家桶(Memca 篇)点击上方“AirPython”,选择“加为星标”第一时间关注 Python 技术干货!1. 前言自动化办公,非 Python ...

AirPython的博客 1233

python办公自动化ppt_最全总结 | 聊聊 Python 办公自动化PPT(下)

1. 前言做为办公自动化 PPT 系列篇的最后一篇文章,咱们将 PPT 中的高级功能及经常使用点web文章内容将覆盖:算法预设形状 Shape编程图表 Chartapi读取文字内容微信保存全部图片网络2. 预设形状 Shape实际上,PPT 文档的内容区就是由各种形状 Shape 组成,包含:图片、文本框、视频、表格、预设形状app其中,预设的普通形状也至关丰富,能够查看下面连接dom 使用下面的...

weixin_33668998的博客 345

办公自动化》课件PPT

办公中常用的设备 第一篇:基础理论篇 第一章:办公自动化的基本知识 第二篇:办公软件篇 第二章:办公中的文档处理 第三章:办公中的表格和图表制作 第四章:办公中的数据处理 第五章:办公中的演示文稿的制作 第六章:办公中电子邮件和桌面信息管理 第三篇:网络办公篇 第七章:办公局域网的组建和应用 第八章:办公中因特网资源应用

办公自动化课件(办公自动化培训课件powerpoint

办公自动化课件,办公自动化课件(办公自动化培训课件powerpoint

python帮助办公自动化系列_最全总结 | 聊聊 Python 办公自动化之 PPT(中)

1. 前言上一篇文章简单地介绍了 PPT 的文档结构,并使用 python-pptx 这个依赖库完成对 PPT 文档最基本的操作作为 PPT 系列篇第 2 篇文章,将覆盖下列内容表格 Table图片 Image,包含静态图片、Gif 动态图片视频 Video2. 表格 Table实例化一个幻灯片 Slide 对象后,就可以使用下面的方法插入一个表格方法:slide.shapes.add_table...

weixin_39517797的博客 460

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

image1. 前言自动化办公,非 Python 莫属!从本篇文章开始,我们继续聊聊自动化办公中另外一个常用系列:PPT2. 准备一下Python 操作 PPT 最强大的依赖库是:python-pptx所以,在开始操作之前,我们需要在虚拟环境下安装这个依赖库# 安装依赖pip3 install python-pptx3. PPT 结构首先,我们需要了解一个 PPT 文档的页面结构image一个 P...

weixin_29119033的博客 238

python办公自动化ppt_最全总结 | 聊聊 Python 办公自动化PPT(中)

image1. 前言上一篇文章简单地介绍了 PPT 的文档结构,并使用 python-pptx 这个依赖库完成对 PPT 文档最基本的操作作为 PPT 系列篇第 2 篇文章,将覆盖下列内容表格 Table图片 Image,包含静态图片、Gif 动态图片视频 Video2. 表格 Table实例化一个幻灯片 Slide 对象后,就可以使用下面的方法插入一个表格方法:slide.shapes.add_...

weixin_31063029的博客 175
上一篇: 最全总结 | 聊聊 Python 办公自动化之 PPT(中)
下一篇: Python入门级学习资料整理
大模型应用场景
博客等级 码龄5年 7117粉丝 1351原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值