Python自动处理pptx:新建、另存、添加幻灯片、添加标题、插入文本图片图形、提取文本

news2025/1/13 15:35:42

Python-pptx库是一个用于创建、更新和读取Microsoft PowerPoint .pptx 文件的Python库。它允许我们使用Python脚本自动化PowerPoint文件的创建、更新和读取操作,是一个非常方便自动化处理PPTX的工具。
1

安装

pip install python-pptx

创建

from pptx import Presentation
ppt = Presentation()
ppt.save('demo.pptx')

打开、另存

from pptx import Presentation
ppt = Presentation('demo.pptx')
ppt.save('new_demo.pptx')

添加幻灯片

from pptx import Presentation
ppt = Presentation()
for i in range(11):
    layout = ppt.slide_layouts[i]
    slide = ppt.slides.add_slide(layout)
ppt.save('添加幻灯片.pptx')

添加标题

from pptx import Presentation
ppt = Presentation()
layout = ppt.slide_layouts[0]
slide = ppt.slides.add_slide(layout)
title = slide.shapes.title
title.text = '演示文稿制作自动化'
subtitle = slide.placeholders[1]
subtitle.text = 'python-pptx库从入门到精通'
ppt.save('添加标题1.pptx')

from pptx import Presentation
ppt = Presentation()
layout = ppt.slide_layouts[1]
slide = ppt.slides.add_slide(layout)
title_shape = slide.shapes.title
title_shape.text = 'python-pptx库的基本操作'
body_shape = slide.shapes.placeholders[1]
tf = body_shape.text_frame
p = tf.add_paragraph()
p.text = '演示文稿的基本操作'
p.level = 0
p = tf.add_paragraph()
p.text = '创建演示文稿'
p.level = 1
p = tf.add_paragraph()
p.text = '打开和保存演示文稿'
p.level = 1
p = tf.add_paragraph()
p.text = '打开演示文稿'
p.level = 2
p = tf.add_paragraph()
p.text = '保存演示文稿'
p.level = 2
ppt.save('添加标题2.pptx')

添加文本框

from pptx import Presentation
from pptx.util import Cm
ppt = Presentation()
layout = ppt.slide_layouts[6]
slide = ppt.slides.add_slide(layout)
left = top = Cm(3)
width = height = Cm(10)
txBox = slide.shapes.add_textbox(left, top, width, height)
tf = txBox.text_frame
tf.text = '海内存知己,天涯若比邻。'
ppt.save('添加文本框.pptx')

设置文本格式

from pptx import Presentation
from pptx.util import Cm, Pt
from pptx.dml.color import RGBColor
from pptx.enum.dml import MSO_THEME_COLOR
from pptx.enum.text import MSO_ANCHOR, PP_ALIGN
# 创建演示文稿并添加幻灯片
ppt = Presentation()
layout = ppt.slide_layouts[6]
slide = ppt.slides.add_slide(layout)
left, top, width, height = Cm(2.7), Cm(2), Cm(20), Cm(15)
# 添加文本框,并设置文本区域的格式
txBox = slide.shapes.add_textbox(left, top, width, height)
text_frame = txBox.text_frame
text_frame.margin_top = Cm(0.5)
text_frame.vertical_anchor = MSO_ANCHOR.TOP
text_frame.word_wrap = True
# 添加第1段文本并设置段落格式和字体格式
text_frame.clear()
text_frame.text = '计算机科学经典著作'
p = text_frame.paragraphs[0]
p.alignment = PP_ALIGN.CENTER
p.space_after = Pt(18)
r = p.runs[0]
r.font.name = '方正隶变简体'
r.font.size = Pt(42)
r.font.bold = True
r.font.color.theme_color = MSO_THEME_COLOR.ACCENT_1
# 添加第2个段落并设置段落格式
p = text_frame.add_paragraph()
p.alignment = PP_ALIGN.JUSTIFY
p.line_spacing = 1.5
# 在第2个段落中添加第1个文本片段并设置字体格式
r = p.add_run()
r.text = 'Introduction to Algorithms'
r.font.name = 'Times New Roman'
r.font.size = Pt(26)
r.font.italic = True
r.font.bold = True
r.font.color.rgb = RGBColor(255, 0, 0)
# 在第2个段落中添加第2个文本片段并设置字体格式
r = p.add_run()
r.text = ',中文译名为《算法导论》。本书语言通俗易懂,很适合自学。'
r.font.name = '方正准雅宋_GBK'
r.font.size = Pt(26)
r.font.italic = False
r.font.bold = False
r.font.color.rgb = RGBColor(0, 0, 0)
ppt.save('设置文本格式.pptx')

添加图片

from pptx import Presentation
from pptx.util import Cm
ppt = Presentation()
layout = ppt.slide_layouts[5]
slide = ppt.slides.add_slide(layout)
slide.shapes.title.text = '烟花三月下扬州'
image_file = '水彩.jpg'
left = Cm(2.7)
top = Cm(4)
width = Cm(20)
pic = slide.shapes.add_picture(image_file, left, top, width)
ppt.save('添加图片.pptx')

添加形状

from pptx import Presentation
from pptx.enum.shapes import MSO_SHAPE
from pptx.util import Cm
ppt = Presentation()
layout = ppt.slide_layouts[5]
slide = ppt.slides.add_slide(layout)
slide.shapes.title.text = '添加形状'
left = top = Cm(4)
width = height = Cm(6)
shape = slide.shapes.add_shape(MSO_SHAPE.SUN, left, top, width, height)
shape.text = '太阳'
ppt.save('添加形状.pptx')

形状填充颜色

from pptx import Presentation
from pptx.enum.shapes import MSO_SHAPE
from pptx.enum.dml import MSO_THEME_COLOR
from pptx.util import Cm
ppt = Presentation()
layout = ppt.slide_layouts[5]
slide = ppt.slides.add_slide(layout)
slide.shapes.title.text = '添加形状'
left, top, width, height = Cm(0.8), Cm(4), Cm(5), Cm(2.5)
for n in range(1, 6):
    shape = slide.shapes.add_shape(MSO_SHAPE.CHEVRON, left, top, width, height)
    shape.text = f'第 {n} 步'
    fill = shape.fill
    fill.solid()
    fill.fore_color.theme_color = MSO_THEME_COLOR.ACCENT_1
    fill.fore_color.brightness = -0.1 * n
    left = left + width - Cm(0.3)
ppt.save('为形状填充颜色.pptx')

添加表格

from pptx import Presentation
from pptx.util import Cm
ppt = Presentation()
layout = ppt.slide_layouts[5]
slide = ppt.slides.add_slide(layout)
slide.shapes.title.text = '添加表格'
# 添加表格
rows = 5
cols = 4
left = Cm(2.7)
top = Cm(4)
width = Cm(20)
height = Cm(6)
table = slide.shapes.add_table(rows, cols, left, top, width, height).table
# 设置列宽
table.columns[0].width = Cm(6)
table.columns[1].width = Cm(5)
table.columns[2].width = Cm(4.5)
table.columns[3].width = Cm(4.5)
# 填充表头
table.cell(0, 0).text = '财务类型'
table.cell(0, 1).text = '大类'
table.cell(0, 2).text = '金额(万元)'
table.cell(0, 3).text = '占比'
# 填充单元格
table.cell(1, 0).text = '资产'
table.cell(1, 1).text = '长期资产'
table.cell(1, 2).text = '5645'
table.cell(1, 3).text = '61.24%'
table.cell(2, 1).text = '流动资产'
table.cell(2, 2).text = '3573'
table.cell(2, 3).text = '38.76%'

table.cell(3, 0).text = '负债'
table.cell(3, 1).text = '股东权益'
table.cell(3, 2).text = '3400'
table.cell(3, 3).text = '48.76%'
table.cell(4, 1).text = '流动负债'
table.cell(4, 2).text = '3573'
table.cell(4, 3).text = '51.24%'
# 合并单元格
cell1 = table.cell(1, 0)
cell1.merge(table.cell(2, 0))
cell2 = table.cell(3, 0)
cell2.merge(table.cell(4, 0))
# 调整内边距
cell1.margin_top = Cm(0.75)
cell1.margin_left = Cm(2.5)
cell2.margin_top = Cm(0.75)
cell2.margin_left = Cm(2.5)

ppt.save('添加表格.pptx')

添加图表

from pptx import Presentation
from pptx.chart.data import CategoryChartData
from pptx.enum.chart import XL_CHART_TYPE, XL_LEGEND_POSITION
from pptx.util import Cm
# 创建一页幻灯片
ppt = Presentation()
layout = ppt.slide_layouts[5]
slide = ppt.slides.add_slide(layout)
slide.shapes.title.text = '各分部参加考试人数'
# 定义图表数据
chart_data = CategoryChartData()
chart_data.categories = ['北京', '上海', '深圳']
chart_data.add_series('男', (19, 21, 16))
chart_data.add_series('女', (27, 15, 20))
# 在幻灯片中添加图表
left, top, width, height = Cm(2.7), Cm(4), Cm(20), Cm(12)
chart = slide.shapes.add_chart(XL_CHART_TYPE.COLUMN_CLUSTERED, left, top, width, height, chart_data).chart
chart.has_legend = True
chart.legend.position = XL_LEGEND_POSITION.RIGHT
chart.legend.include_in_layout = False

ppt.save('添加图表.pptx')

提取文本

from pptx import Presentation
ppt = Presentation('提取文本.pptx')
text_runs = []
for slide in ppt.slides:
    for shape in slide.shapes:
        if shape.has_text_frame:
            for paragraph in shape.text_frame.paragraphs:
                for run in paragraph.runs:
                    text_runs.append(run.text)
text_runs = '\n'.join(text_runs)
with open('提取文本.txt', mode='w', encoding='utf-8') as f:
    f.write(text_runs)

添加备注

from pptx import Presentation
ppt = Presentation('添加备注.pptx')
for slide in ppt.slides:
    if not slide.has_notes_slide:
        notes_slide = slide.notes_slide
        text_frame = notes_slide.notes_text_frame
        text_frame.text = '注意控制语速和时间'
ppt.save('添加备注1.pptx')

基于模板制作

import pptx
from pptx import Presentation
from pptx.dml.color import RGBColor
from pptx.util import Cm, Pt
from pptx.enum.text import MSO_ANCHOR, PP_ALIGN
ppt = Presentation('模板.pptx')
# 制作标题幻灯片
layout = ppt.slide_layouts[0]
slide = ppt.slides.add_slide(layout)
slide.shapes.placeholders[0].text = '个人作品展示'
slide.shapes.placeholders[1].text = '2022年1月'
# 制作第1页正文
layout = ppt.slide_layouts[1]
slide = ppt.slides.add_slide(layout)
slide.shapes.placeholders[0].text = '零基础学Python网络爬虫案例实战\n全流程详解(入门与提高篇)'
slide.shapes.placeholders[1].text = '定价:99.00元\nISBN:978-7-111-68368-1\n出版时间:2021年7月'
left, top, width, height = Cm(1.3), Cm(10.2), Cm(15), Cm(7)
content_box = slide.shapes.add_textbox(left, top, width, height)
text_frame = content_box.text_frame
text_frame.vertical_anchor = MSO_ANCHOR.TOP
text_frame.word_wrap = True
p = text_frame.paragraphs[0]
p.alignment = PP_ALIGN.JUSTIFY
r = p.add_run()
r.text = '网络爬虫是当今获取数据不可或缺的重要手段。本书讲解了爬虫的基础知识和必备技能,能够帮助零基础的读者快速入门并熟练使用爬虫。'
r.font.name = '方正兰亭细黑_GBK'
r.font.size = Pt(24)
r.font.color.rgb = RGBColor(0, 0, 0)
image_file = '封面1.png'
left, top, height = Cm(18), Cm(4.3), Cm(13.5)
slide.shapes.add_picture(image_file=image_file, left=left, top=top, height=height)
# 制作第2页正文
layout = ppt.slide_layouts[1]
slide = ppt.slides.add_slide(layout)
slide.shapes.placeholders[0].text = '零基础学Python网络爬虫案例实战\n全流程详解(高级进阶篇)'
slide.shapes.placeholders[1].text = '定价:89.80元\nISBN:978-7-111-68474-9\n出版时间:2021年7月'
left, top, width, height = Cm(1.3), Cm(10.2), Cm(15), Cm(7)
content_box = slide.shapes.add_textbox(left, top, width, height)
text_frame = content_box.text_frame
text_frame.vertical_anchor = MSO_ANCHOR.TOP
text_frame.word_wrap = True
p = text_frame.paragraphs[0]
p.alignment = PP_ALIGN.JUSTIFY
r = p.add_run()
r.text = '网络爬虫是当今获取数据不可或缺的重要手段。本书讲解了爬虫的进阶理论与技术,能够帮助读者进一步提升实际应用水平。' 
r.font.name = '方正兰亭细黑_GBK'
r.font.size = Pt(24)
r.font.color.rgb = RGBColor(0, 0, 0)
image_file = '封面2.png'
left, top, height = Cm(18), Cm(4.3), Cm(13.5)
slide.shapes.add_picture(image_file=image_file, left=left, top=top, height=height)
# 制作结尾幻灯片
layout = ppt.slide_layouts[2]
slide = ppt.slides.add_slide(layout)
slide.shapes.placeholders[0].text = '感谢关注'
ppt.save('作品展示.pptx')

参考

https://python-pptx.readthedocs.io/en/latest/index.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1127680.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

记一次公司项目上的常规渗透测试

授权项目上的渗透测试,漏洞有网站弱口令—存储型XSS—文件上传。 前言 本文由知识星球《网络安全情报攻防站》星友堂主投稿,感谢投稿。授权项目下常规的渗透测试。欢迎朋友们积极投稿,投稿有奖励。天冷了来领奶茶钱 正文 网站首页 首页啥都没…

前端koa搭建服务器(保姆级教程)——part1

目录 koa简介前端项目搭建koa环境第一步:新建项目第二步:环境初始化,安装依赖初始化项目,生成package.json文件安装koa依赖安装koa-router 路由管理依赖安装dotenv 环境变量依赖安装nodemon 热启动依赖 第三步:代码调用…

黄金代理这么多,怎么选?

目前,现货黄金代理已成为了市场中成熟的模式,我们只要在搜索引擎上搜索如何在市场中开户,会搜到各种各样的黄金代理,其中更是不乏服务非常优秀的。部分投资者早就接受了黄金代理的存在,并且率先开始在黄金代理中进行开…

【单调栈】503. 下一个更大元素 II、42. 接雨水

提示:努力生活,开心、快乐的一天 文章目录 503. 下一个更大元素 II💡解题思路🤔遇到的问题💻代码实现🎯题目总结 42. 接雨水💡解题思路🤔遇到的问题💻代码实现&#x1f3…

反射Java

反射是获取摸个类的所有对象 构造器 :成员变量: 成员方法 获取方式 package Reflect;//获取class类的对象public class Test1Clacc {public static void main(String[] args)throws Exception {Class c1Student.class;System.out.println(c1.getName(…

神奇代码备份恢复工具逸事与操作指南

文章目录 一,序二,逸事三,为什么今天要提这个工具四,操作界面1. 文章发表者备份项目步骤2. 文章发表者恢复项目操作步骤3. 文章阅读者恢复项目步骤 五,附件1. 示例备份文件2. 神奇代码备份恢复工具源码备份 一&#xf…

淘宝商品详情API接口(标题|主图|SKU|价格|商品销量)

Taobao.item_get-获得淘宝商品详情接口,淘宝商品详情数据接口是淘宝开放平台提供的一种API接口,通过调用该接口,可以获取淘宝商品详情信息。该接口支持多种编程语言,包括Java、PHP、Python等。在使用淘宝商品详情API接口时&#x…

你知道有哪些好用的数据分析工具类软件?

前言 俗话说,工欲善其事,必先利其器。工匠想要使他的工作做好,一定要先让工具锋利。比喻要做好一件事,准备工具非常重要。对于数据分析人员来说是一样的,想要提高工作效率,也需要选择好自己的工具&#xf…

2023年中国监控光端机优点、市场规模及发展前景分析[图]

监控光端机是一种用于光纤通信网络的设备,用于连接光纤到用户设备(如计算机、路由器等)。监控光端机行业涉及制造、销售和维护这些设备,以确保高速、稳定的光纤通信连接,适用于家庭、企业和数据中心等不同应用场景。 …

vue项目中调用Google自带右下角弹框

vue项目中使用Google右下角弹框 一、效果二、代码 一、效果 二、代码 google浏览器要在设置通知权限开启 // Google消息提示googleNewsTip() {// 请求用户授权显示通知Notification.requestPermission().then(function (permission) {if (permission granted) {// 创建新的通知…

软件工程——期末复习知识点汇总

本帖的资料来源于某国内顶流高校的期末考试资料,仅包含核心的简答题,大家结合个人情况,按需复习~ 总的来说,大层面重点包括如下几个方面: 软件过程需求工程 设计工程软件测试软件项目管理软件过程管理 1.掌握软件生命…

成人高考多少分才能被录取?成人高考成绩多少分合格?柯桥学历学校告诉你

成人高考需要多少分才能被录取? 成人高考的录取分数线因时间和地区而不同。一般来说,每年的录取分数线会根据考生整体表现和考试难度进行调整。 以2022年的成人高考为例,录取分数线大约在100-150分之间,根据不同地区和专业&#x…

探索现代IT岗位:职业机遇的海洋

目录 1 引言2 传统软件开发3 数据分析与人工智能4 网络与系统管理5 信息安全6 新兴技术领域 1 引言 随着现代科技的迅猛发展,信息技术(IT)行业已经成为了全球经济的关键引擎,改变了我们的生活方式、商业模式和社会互动方式。IT行…

解决 /bin/bash^M: bad interpreter: No such file or directory

问题描述 linux 系统中知行*.sh 文件报/bin/bash^M: bad interpreter: No such file or directory 原因: .sh文件是在windows系统编写的,在linux执行就有问题 解决过程 转化下格式执行如下命令 # dos2unix app.sh 结果bash: dos2unix: command not …

爬虫爬取数据时怎么配置代理IP来精准导航分析大数据?

在这个数字盛宴中,每一刹那都充满了无数的信息流转。就像瀑布中的水滴,每一滴都承载着可能性。爬虫代理IP与穿云API就像是这场盛宴中的精准导航仪,帮助我们捕捉那些最有价值的信息滴点,确保在这个时代的快速迭代中,我们…

FoneDog iOS Unlocker(ios解锁工具) 适用macos电脑

FoneDog iOS Unlocker是一款专业的iOS设备解锁工具,旨在帮助用户解决iOS设备上的解锁问题。该软件支持解锁各种锁定类型,如数字密码锁、手势密码锁、Touch ID和Face ID等,可以解除iPhone、iPad和iPod Touch等设备的锁定状态。FoneDog iOS Unl…

文件批量重命名 Renamer 最新中文 for mac

Renamer是一款用于批量重命名文件和文件夹的实用工具软件。它提供了简单直观的界面和丰富的重命名选项,可以帮助用户快速、方便地对大量文件进行重命名操作。 以下是Renamer软件的主要特点和功能: 批量重命名:Renamer支持批量重命名文件和文…

H3C LC-5120-52SC-HI配置管理IP

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、MGMT是什么?二、配置步骤1.连接ConsoleWindowsLinux1.配置minicom2.使用minicom 2.配置管理端口3.配置Web管理4.http其它配置项 总结 前言 最近…

成绩查询系统:老师好帮手,学生的福音

老师们还在经常为了成绩发布而烦恼?希望有一个简单易用的工具,能让你一键发布成绩,省时省力?那么,查分小程序就是你的救星!高效便捷,操作简单,老师们都该尝试一下! 成绩查…

架构设计参考项目系列主题:一文讲透DataOps数据运营到底是什么

DataOps,即Data和Operations组合。是在数据分析过程中,提升数据质量,减少数据分析的周期时间,提高效率的一系列实践,现在逐渐发展成了一门方法论。DataOps适用于从数据准备到报告的整个数据生命周期。 DataOps是一门快…