🔥Python操控幻灯片世界!🎨创建、修改全方位,一切由代码定义slide&shapes?

文章主题:新建样式, 修改文档, PPTX操作, 添加元素(幻灯片

666ChatGPT办公新姿势,助力做AI时代先行者!

ppt可以做的操作:

🎨当然,您可以轻松创作全新的幻灯片设计,只需动动手指,就能唤起无限创意!别误会,这不是单纯的PPT复制游戏,而是深入挖掘PPTX的强大潜力,它内置的丰富功能让您对现有文档进行精准编辑和个性化改造。就像调色盘上的色彩,每一笔都蕴含专业力量。🚀无论是初次尝试还是熟练操控,这里都能满足您的需求,让您的演示文稿独树一帜!记得,内容为王,风格只是锦上添花哦!💪

✨🚀掌握PPT艺术,只需几步!🎨📊打造专业演示文稿🌍1️⃣ **幻灯片魔力**:轻松插入幻灯片,每个占位符都蕴含无限可能!📝2️⃣ **视觉盛宴**:图像生动,点亮观众眼球,让信息跃动起来!🖼️3️⃣ **文本魅力**:调整字体样式,展现专业与清晰,每字都触动心灵!🎨4️⃣ **数据图表**:柱状、条形、折线图…多角度剖析,数据说话更有力!📊5️⃣ **图形世界**:几何图形点缀,复杂问题简单化,逻辑一目了然!shapes.svg6️⃣ **主题定制**:个性化标题,选择适合的配色方案,让PPT风格独树一帜!🎨Themes7️⃣ **细节决定成败**:别忘了设置属性,让每一页都完美无瑕!📖立即行动,提升你的演讲技巧,用PPT讲述世界的故事吧!🌍💬#PPT制作 #视觉传达 #数据分析

🌟🎨用Python的强大图像处理工具matplotlib和它精美的子库seaborn,轻松创建令人惊艳的视觉效果!将这些生动的图表嵌入PPT,为你的演示增添无尽洞察力。别忘了,每一张精心设计的图都是数据讲故事的最佳方式!📚📊

根据ppt模板修改有两种方式:

1.PPT上的每一个字符都是由python代码生成。

2.查找ppt的文本内容,再修改。

PPT结构说明:

Slide幻灯片是展示信息的艺术,shape是其构成的基本单元,Paragraph则是这些单元内的文字篇章。段落内部的运行机制,我们称之为’块儿run’,它确保了信息的流畅和连贯性。每一页幻灯片犹如构建故事的砖块,shape如同其中的文字与图像,Paragraph则承载着讲述的每一个章节。通过巧妙地组织这些元素,我们可以创造出既吸引眼球又富含价值的高质量内容。记得优化你的Slide设计,让每个shape都充满活力,Paragraph清晰有力,从而提升搜索引擎可见度和用户体验。🚀

如上概念,对应到ppt包中如下:

实例化prs对象,ppt对象:

0.prs=Presentation() # 可以带参数,参数为ppt模板路径path,

Slide的魅力在于它们一页一页地揭示故事,就像一部动态的电影,每一页都是精心设计的视觉盛宴。要探索这些丰富的幻灯片世界,首先你需要通过`prs.slides`这个关键路径来获取它们,因为每个prs(演示文稿)都可能包含多个slide,数量与页面数等同,寓意着无尽的信息和创意。这里的每一个slide都是智慧和创新的结晶,等待你去一一探索和解读。

2.获取shape形状:slide.shapes 一个slide有多个shape

3.判断每个shpae是否存在文字:shape.has_text_frame

4.获取文字框对象:shape.text_frame

5.获取文字框对象内容:shape.text_frame.text 也可以直接赋值。

prs对象就是一棵树,基本的层次关系如下:

Presentation -> slide_masters -> slide_layouts

Presentation -> slides -> shapes -> placeholders | note | text_frame …

概念:

Presentation 演示文稿构造对象

slide_masters 幻灯片母版 (一个演示文件可以具有多个幻灯片母版) –

slide_layouts 幻灯片布局(属于母版而非 prs)

slides 幻灯片对象组,默认指向第一页 add_slide

🎨🎨在数字艺术的世界里,”形状”不再仅仅是二维画布上的轮廓那么简单。它们是创意的画板,每一个独特的”shape”犹如 Photoshop 中的图层,赋予作品深度与层次。就如同你轻轻点击鼠标,在画布上添加那一抹鲜艳的色彩,我们通过`add_shape`工具,为你的想象构建出无限可能的三维空间。🎨✨每个”shape”,无论是精巧的桌台边缘,还是复杂的立体结构,都是设计师自由挥洒创意的舞台。它们不仅承载着设计者的构想,更在光影下展现出无尽的生命力。每一个shap,都如同时间的雕塑,记录着创新与技术的进步。🚀🎨想象一下,通过我们的工具,你可以轻松地调整形状的角度和维度,就像调色盘上的色彩那样自由变换。每个细微的变化都能引发视觉的涟漪,让观者沉浸在你的艺术世界中。🌍🖼️让我们一起探索这个由无数”shape”构建的数字宇宙,用创新的笔触勾勒出未来的轮廓。👩‍💻🎨

placeholders… 占位符,字典辅助类,每一个方框中都可以输入文字,或者输入其他类型的内容,该方框就叫占位符Placeholder

根据placeholdes获取一页幻灯片中的元素,slide.shapes.placeholders,使用该函数返回的对象下标访问.text 赋值,该下标的访问个数,是通过slide_layouts[*]定义时,所产生的。比如设置0,则有一个title和一个subtitle ,可以通过slide.shpaes.title 访问title对象,并调用title对象的text属性 赋值,达到设置幻灯片标题的目的。

幻灯片布局

(版式,在windows ppt中有对应的下拉框) prs.slide_layouts[0],根据参数的不同,设置不同的幻灯片布局,传入0获取第一个版式(也就是幻灯片布局)

0 -> title and subtitle 标题和副标题

1 -> title and content 标题和内容

2 -> section header 标题

3 -> two content 一个标题,两个内容

4 -> Comparison 一个标题,两个副标题,两个内容

5 -> Title only 仅标题

6 -> Blank 空白

7 -> Content with caption

8 -> Pic with caption 带标题的图片

如下两种方式等价。

prs = Presentation()
prs.slide_masters[0].slide_layouts[0]
prs.slide_layouts[0]

导入包

from pptx import Presentation
from pptx.chart.data import ChartData,XyChartData,BubbleChartData,CategoryChartData
from pptx.enum.chart import XL_CHART_TYPE,XL_LABEL_POSITION,XL_LEGEND_POSITION
from pptx.util import Inches
from pptx.enum.text import MSO_ANCHOR, MSO_AUTO_SIZE,MSO_VERTICAL_ANCHOR,PP_PARAGRAPH_ALIGNMENT,PP_ALIGN
from pptx.dml.color import RGBColor
from pptx.enum.dml import MSO_THEME_COLOR
from pptx.enum.shapes import MSO_SHAPE_TYPE,MSO_SHAPE
from pptx.util import Pt,Cm

初始化对象

如果模板中存在ppt页面,则可以通过下标选择ppt,否则可以通过函数在最后追加ppt

prs = Presentation(./yishilumuban.pptx)

1.通过下标访问ppt slide

选择在已经存在的ppt页写入数据

设置添加到当前ppt哪一页

n_page = 0
# 定义内容:
singleLineContent = “我是单行内容”
multiLineContent = \
“””我是多行内容1
我是多行内容2
我是多行内容3
“””
# 获取需要添加文字的页面对象
slide0 = prs.slides[n_page]
# slide0=prs.slides.add_slide(prs.slide_layouts[1])
# 设置幻灯片标题
title_placeholder0=slide0.shapes.title
title_placeholder0.text=Hello World

添加单行内容

# 设置添加文字框的位置以及大小
left, top, width, height = Cm(1.9), Cm(1), Cm(12), Cm(1.2)
# 添加文字段落 slide.shapes.add_textbox(距离左边,距离顶端,宽度,高度)
new_paragraph0 = slide0.shapes.add_textbox(left=left, top=top, width=width, height=height).text_frame
# 设置段落内容
new_paragraph0.paragraphs[0].text = singleLineContent
# 设置文字大小
new_paragraph0.paragraphs[0].font.size = Pt(15)

添加多行

# 设置添加文字框的位置以及大小
left, top, width, height = Cm(1.9), Cm(3), Cm(12), Cm(3.6)
# 添加文字段落
new_paragraph2 = slide0.shapes.add_textbox(left=left, top=top, width=width, height=height).text_frame
# 设置段落内容
new_paragraph2.paragraphs[0].text = multiLineContent
# 设置文字大小
new_paragraph2.paragraphs[0].font.size = Pt(15)

设置文字框样式与文字样式

left, top, width, height = Cm(16.9), Cm(1), Cm(12), Cm(1.2)
textBox = slide0.shapes.add_textbox(left=left, top=top, width=width, height=height)
# 调整文本框背景颜色
textBoxFill = textBox.fill
textBoxFill.solid() # 纯色填充 RGB颜色:https://www.w3schools.com/colors/colors_rgb.asp RGB Color Codes Chart
textBoxFill.fore_color.rgb = RGBColor(187, 255, 255)
# 文本框边框样式调整
line = textBox.line
line.color.rgb = RGBColor(0, 255, 0)
line.width = Cm(0.1)
# 获取文本框对象
tf = textBox.text_frame
# 文本框样式调整
tf.margin_bottom = Cm(0.1) # 下边距
tf.margin_left = 0 # 左边距
tf.vertical_anchor = MSO_VERTICAL_ANCHOR.BOTTOM # 对齐文本方式:底端对齐
tf.word_wrap = True # 文本框的文字自动对齐
text_frame.auto_size = MSO_AUTO_SIZE.SHAPE_TO_FIT_TEXT
# 设置内容
tf.paragraphs[0].text = 这是一段文本框里的文字

# 字体样式调整
tf.paragraphs[0].alignment = PP_ALIGN.CENTER # 对齐方式 DISTRIBUTE JUSTIFY JUSTIFY_LOW LEFT RIGHT THAI_DISTRIBUTE MIXED
tf.paragraphs[0].font.name = 微软雅黑 # 字体名称
tf.paragraphs[0].font.bold = True # 是否加粗
tf.paragraphs[0].font.italic = True # 是否斜体
tf.paragraphs[0].font.color.rgb = RGBColor(255, 0, 0) # 字体颜色
tf.paragraphs[0].font.size = Pt(20) # 字体大小

使用文本 slide2

# add_slide 将幻灯片添加到集合末尾。
slide1 = prs.slides.add_slide(prs.slide_layouts[1])
# 也可以直接访问:slide.shapes.title.text = ” Created By python-pptx”
title_placeholder1=slide1.shapes.title
title_placeholder1.text=访问文本框
# 对形状类型进行检查,确保可以使用文本框
for shape in slide1.shapes:
if not shape.has_text_frame:
continue
text_frame = shape.text_frame
# —————-
# 访问段落。一个文本框包含至少一个段落,
paragraph_strs = [
Egg, bacon, sausage and spam.,
Spam, bacon, sausage and spam.,
Spam, egg, spam, spam, bacon and spam.
]

text_frame.clear() # remove any existing paragraphs, leaving one empty one

p = text_frame.paragraphs[0]
p.text = paragraph_strs[0]

for para_str in paragraph_strs[1:]:
p = text_frame.add_paragraph()# 新增paragraph
p.text = para_str

🔥Python操控幻灯片世界!🎨创建、修改全方位,一切由代码定义slide&shapes?

应用字符格式

slide2 = prs.slides.add_slide(prs.slide_layouts[1])
title_placeholder2=slide2.shapes.title
title_placeholder2.text=应用字符格式
for shape in slide2.shapes:
if not shape.has_text_frame:
continue
text_frame = shape.text_frame
p = text_frame.paragraphs[0]
run = p.add_run()
run.text = Spam, eggs, and spam
# 设置超链接
run.hyperlink.address = scanny/python-pptx #
font = run.font
font.name -&nbsp = Calibri
font.size = Pt(18)
font.bold = True
font.italic = None # cause value to be inherited from theme
font.color.theme_color = MSO_THEME_COLOR.ACCENT_1
🔥Python操控幻灯片世界!🎨创建、修改全方位,一切由代码定义slide&shapes?

图形

可以通过其他第三方的库比如Matplotlib可视化成图片,在ppt中插入图片即可

柱状图

slide3 = prs.slides.add_slide(prs.slide_layouts[5])
title_placeholder3=slide3.shapes.title
title_placeholder3.text=柱状图
# 2. 创建图表数据
chart_data = CategoryChartData()
chart_data.categories = [East, West, Midwest]
chart_data.add_series(Series 1, (19.2, 21.4, 16.7))
# 添加数据到s幻灯片
x, y, cx, cy = Inches(2), Inches(2), Inches(6), Inches(4.5)
slide3.shapes.add_chart(
XL_CHART_TYPE.COLUMN_CLUSTERED, x, y, cx, cy, chart_data
)
# 在柱状图傍显示图列
chart.has_legend = True
chart.legend.position = XL_LEGEND_POSITION.RIGHT
chart.legend.include_in_layout = False

plot = chart.plots[0]
plot.has_data_labels = True
data_labels = plot.data_labels
data_labels.font.size = Pt(13)
data_labels.font.color.rgb = RGBColor(0x0A, 0x42, 0x80)
data_labels.position = XL_LABEL_POSITION.INSIDE_END

🔥Python操控幻灯片世界!🎨创建、修改全方位,一切由代码定义slide&shapes?

多柱状图

slide4 = prs.slides.add_slide(prs.slide_layouts[5])
title_placeholder4=slide4.shapes.title
title_placeholder4.text=多柱状图
chart_data = ChartData()
chart_data.categories = [East, West, Midwest]
chart_data.add_series(Q1 Sales, (19.2, 21.4, 16.7))
chart_data.add_series(Q2 Sales, (22.3, 28.6, 15.2))
chart_data.add_series(Q3 Sales, (20.4, 26.3, 14.2))
graphic_frame = slide4.shapes.add_chart(
XL_CHART_TYPE.COLUMN_CLUSTERED, x, y, cx, cy, chart_data
)
chart = graphic_frame.chart
🔥Python操控幻灯片世界!🎨创建、修改全方位,一切由代码定义slide&shapes?

散点图

slide5 = prs.slides.add_slide(prs.slide_layouts[5])
title_placeholder5=slide5.shapes.title
title_placeholder5.text=散点图
chart_data = XyChartData()
series_1 = chart_data.add_series(Model 1)
series_1.add_data_point(0.7, 2.7)
series_1.add_data_point(1.8, 3.2)
series_1.add_data_point(2.6, 0.8)
series_2 = chart_data.add_series(Model 2)
series_2.add_data_point(1.3, 3.7)
series_2.add_data_point(2.7, 2.3)
series_2.add_data_point(1.6, 1.8)
chart = slide5.shapes.add_chart(
XL_CHART_TYPE.XY_SCATTER, x, y, cx, cy, chart_data
).chart
🔥Python操控幻灯片世界!🎨创建、修改全方位,一切由代码定义slide&shapes?

根据数据大小设置大小的气泡图

slide6 = prs.slides.add_slide(prs.slide_layouts[5])
title_placeholder6=slide6.shapes.title
title_placeholder6.text=散点图-气泡大小
chart_data = BubbleChartData()

series_1 = chart_data.add_series(Series 1)
series_1.add_data_point(0.7, 2.7, 10)
series_1.add_data_point(1.8, 3.2, 1)
series_1.add_data_point(2.6, 0.8, 0.5)

chart = slide6.shapes.add_chart(
XL_CHART_TYPE.BUBBLE, x, y, cx, cy, chart_data
).chart

🔥Python操控幻灯片世界!🎨创建、修改全方位,一切由代码定义slide&shapes?

折线图

slide7 = prs.slides.add_slide(prs.slide_layouts[5])
title_placeholder7=slide7.shapes.title
title_placeholder7.text=折线图
chart_data = CategoryChartData()
chart_data.categories = [Q1 Sales, Q2 Sales, Q3 Sales]
chart_data.add_series(West, (32.2, 28.4, 34.7))
chart_data.add_series(East, (24.3, 30.6, 20.2))
chart_data.add_series(Midwest, (20.4, 18.3, 26.2))

x, y, cx, cy = Inches(2), Inches(2), Inches(6), Inches(4.5)
chart = slide7.shapes.add_chart(
XL_CHART_TYPE.LINE, x, y, cx, cy, chart_data
).chart

chart.has_legend = True
chart.legend.include_in_layout = False
chart.series[0].smooth = True# 是否平滑
chart.font.size = Pt(10) # 文字大小

🔥Python操控幻灯片世界!🎨创建、修改全方位,一切由代码定义slide&shapes?

饼图

slide8 = prs.slides.add_slide(prs.slide_layouts[5])
title_placeholder8=slide8.shapes.title
title_placeholder8.text=折线图
chart_data = ChartData()
chart_data.categories = [West, East, North, South, Other]
chart_data.add_series(Series 1, (0.135, 0.324, 0.180, 0.235, 0.126))

chart = slide8.shapes.add_chart(
XL_CHART_TYPE.PIE, x, y, cx, cy, chart_data
).chart

chart.has_legend = True
chart.legend.position = XL_LEGEND_POSITION.BOTTOM
chart.legend.include_in_layout = False

chart.plots[0].has_data_labels = True
data_labels = chart.plots[0].data_labels
data_labels.number_format = 0%
data_labels.position = XL_LABEL_POSITION.OUTSIDE_END

🔥Python操控幻灯片世界!🎨创建、修改全方位,一切由代码定义slide&shapes?

其他图表 https://python-pptx.readthedocs.io/en/latest/api/chart.html#chart-api 或者使用其他库,生成图表

表格:

slide9 = prs.slides.add_slide(prs.slide_layouts[1])
# 设置表格位置和大小
left, top, width, height = Cm(1), Cm(1), Cm(13.6), Cm(5)
# 1.表格行列数,和大小 并添加表格到幻灯片 shapes.add_table(rows, cols, left, top, width, height)
shape = slide9.shapes.add_table(6, 7, left, top, width, height)# 返回表格形状,而不是表格本身。
# 访问表格对象
table = shape.table
# shape.has_table 判断是否包含表格。
# 设置列宽
table.columns[0].width = Cm(3)
table.columns[1].width = Cm(2.3)
table.columns[2].width = Cm(2.3)
table.columns[3].width = Cm(1.3)
table.columns[4].width = Cm(1.3)
table.columns[5].width = Cm(1.3)
table.columns[6].width = Cm(2.1)
# 设置行高
table.rows[0].height = Cm(1)
# 合并首行
table.cell(0, 0).merge(table.cell(0, 6))
# 填写标题
table.cell(1, 0).text = “column1”
table.cell(1, 1).text = “column2”
table.cell(1, 2).text = “column3”
table.cell(1, 3).text = “column4”
table.cell(1, 4).text = “column5”
table.cell(1, 5).text = “column6”
table.cell(1, 6).text = “column7/”

# 填写变量内容
table.cell(0, 0).text = “产品1”
content_arr = [[“4/30-5/14”, “DVT1”, “20”, “12”, “22”, “25”, “5”],
[“5/15-5/21”, “DVT1”, “25”, “32”, “42”, “30”, “8”],
[“5/22-6/28”, “DVT1”, “1”, “27”, “37”, “56”, “12”],
[“5/22-6/28”, “DVT1”, “1”, “27”, “37”, “56”, “12”]]

# 修改表格样式
for rows in range(6):
for cols in range(7):
# Write column titles
if rows == 0:
# 设置文字大小
table.cell(rows, cols).text_frame.paragraphs[0].font.size = Pt(15)
# 设置字体
table.cell(rows, cols).text_frame.paragraphs[0].font.name = 微软雅黑
# 设置文字颜色
table.cell(rows, cols).text_frame.paragraphs[0].font.color.rgb = RGBColor(255, 255, 255)
# 设置文字左右对齐
table.cell(rows, cols).text_frame.paragraphs[0].alignment = PP_ALIGN.CENTER
# 设置文字上下对齐
table.cell(rows, cols).vertical_anchor = MSO_ANCHOR.MIDDLE
# 设置背景为填充
table.cell(rows, cols).fill.solid()
# 设置背景颜色
table.cell(rows, cols).fill.fore_color.rgb = RGBColor(34, 134, 165)
elif rows == 1:
table.cell(rows, cols).text_frame.paragraphs[0].font.size = Pt(10)
table.cell(rows, cols).text_frame.paragraphs[0].font.name = 微软雅黑 # 字体名称
table.cell(rows, cols).text_frame.paragraphs[0].font.color.rgb = RGBColor(0, 0, 0)
table.cell(rows, cols).text_frame.paragraphs[0].alignment = PP_ALIGN.CENTER
table.cell(rows, cols).vertical_anchor = MSO_ANCHOR.MIDDLE
table.cell(rows, cols).fill.solid()
table.cell(rows, cols).fill.fore_color.rgb = RGBColor(204, 217, 225)
else:
table.cell(rows, cols).text = content_arr[rows – 2][cols]
table.cell(rows, cols).text_frame.paragraphs[0].font.size = Pt(10)
table.cell(rows, cols).text_frame.paragraphs[0].font.name = 微软雅黑 # 字体名称
table.cell(rows, cols).text_frame.paragraphs[0].font.color.rgb = RGBColor(0, 0, 0)
table.cell(rows, cols).text_frame.paragraphs[0].alignment = PP_ALIGN.CENTER
table.cell(rows, cols).vertical_anchor = MSO_ANCHOR.MIDDLE
table.cell(rows, cols).fill.solid()
table.cell(rows, cols).fill.fore_color.rgb = RGBColor(204, 217, 225)

🔥Python操控幻灯片世界!🎨创建、修改全方位,一切由代码定义slide&shapes?

表格2 shapes.add_table(rows, cols, left, top, width, height)

black_slide_layout=prs.slide_layouts[6]
slide=prs.slides.add_slide(black_slide_layout)
shapes=slide.shapes
rows, cols = 5, 3
left = top = Cm(5)
width = Cm(18)
height = Cm(3)
table=shapes.add_table(rows,cols,left,top,width,height).table
table.columns[0].width=Cm(6)
table.columns[1].width=Cm(2)
table.columns[2].width=Cm(2)
table.rows[0].height=Cm(2)
data = [
[“姓名”,“性别”,“成绩”],
[“张三”,“男”,96],
[“李四”,“女”,87],
[“王五”,“女”,90],
[“赵六”,“男”,78]
]
for row in range(rows):
for col in range(cols):
table.cell(row,col).text = str(data[row][col])
🔥Python操控幻灯片世界!🎨创建、修改全方位,一切由代码定义slide&shapes?

图片:

slide10 = prs.slides.add_slide(prs.slide_layouts[1])
# 设置待添加的图片
img_name = 微信图片_20201215184251.png
# 设置位置
left, top, width, height = Cm(6), Cm(6), Cm(20), Cm(9)
# 进行添加 slide.shapes.add_picturs(图片路径, 距离左边, 距离顶端, 宽度, 高度)
slide10.shapes.add_picture(image_file=img_name,left=left,top=top,width=width,height=height)

保存

prs.save(test.pptx)

读取表格内容

# 打开待读取的ppt文件
ppt = Presentation(test.pptx)
# 获取第0张
slide0 = ppt.slides[3]

# 遍历所有内容
for shape in slide0.shapes:
# 打印shape名称
print(shape.shape_type)
# 判断是否为表格
if shape.shape_type == MSO_SHAPE_TYPE.TABLE:
#获取表格行
for row in shape.table.rows:
for cell in row.cells:
print(cell.text_frame.text)

删除某一页ppt

def del_slide(prs,index):
slides = list(prs.slides._sldIdLst)
prs.slides._sldIdLst.remove(slides[index])
ppt = Presentation(path.pptx)
# 获取所有页
slides = ppt.slides
number_pages = len(slides)
# 设置需要删除的页面数量
delPageNums = 3
# 进行删除操作(每次都删除第一张ppt)
for index in range(delPageNums):
del_slide(ppt,0)

获取某一页slide的内容

for i ,slide in enumerate(prs.slides):
if i==1:# 第二页
for shape in slide.shapes:
if shape.has_text_frame:
text_frame=shape.text_frame
print(text_frame.text)

获取shape中的全部Paragraph(也可以获取单个Paragraph)

for i,slide in enumerate(prs.slides):
if i==1:
for shape in slide.shapes:
if shape.has_text_frame:
text_frame=shape.text_frame
for paragraph in text_frame.paragraph:
print(paragragh.text)

获取段落和文字块

for slide in pptx.slides:
for shape in slide.shapes:
if shape.has_text_frame:
text_frame = shape.text_frame
for paragraph in text_frame.paragraphs:
for run in paragraph.runs:
print(run.text)

遍历文件夹下所有2007版本以上的ppt文件;遍历每个文件的页面,形状,查找目标内容并替换。

import pptx
from pptx import Presentation
for fpathe,dirs,fs in os.walk(ppt):
for f in fs:
if .pptx in f:
paths=”%s\%s” %(fpathe,f)
print(paths)
prs = Presentation(%s%paths)
for j in range(0,len(prs.slides)):
shape=prs.slides[j].shapes
for i in range(0,len(shape)):
if(shape[i].has_text_frame):
for paragraph in shape[i].text_frame.paragraphs:
for run in paragraph.runs:
if 需要替换的内容 in run.text:
run.text=你的内容
os.makedirs(%s_r%fpathe)
prs.save(%s_r\%s%(fpathe,f))

查找某一页中的run块文本内容,并替换。

import pptx
from pptx import Presentation

prs = Presentation(XX门店客流阶段性报告模板(2).pptx)
shape=prs.slides[0].shapes
for i in range(0,len(shape)):
if(shape[i].has_text_frame):
for paragraph in shape[i].text_frame.paragraphs:
for run in paragraph.runs:
if XX in run.text:
run.text=依视路
prs.save(XX门店客流阶段性报告模板.pptx)

如果已经存在模板,则可以通过该方式对内容进行替换。

# 1.占位符id的打印
prs = Presentation(path.pptx)
slide = prs.slides.add_slide(prs.slide_layouts[0])
for shape in slide.placeholders:
phf = shape.placeholder_format
print(f”{phf.idx}—{shape.name}—{phf.type}”)
shape.text = f”{phf.idx}—{shape.name}—{phf.type}”
prs.save(“模板.pptx”)

# 2. 内容的填写
prs = Presentation(“path.pptx”)
slide = prs.slides.add_slide(prs.slide_layouts[0])
text1 = slide.placeholders[0]
text2 = slide.placeholders[1]
text1.text = “name1”
text2.text = “name2”
prs.save(“内容填充.pptx”)

在占位符中添加段落

# 1. 占位符id确认 为phf.idx
prs=Presentation(path.pptx)
slide=prs.slides.addlide(prs.slide_layouts[0])
for shape in slide.placeholders:
phf=shape.plachholder_format
print(f”{phf.idx}–{shape.name}–{phf.type}”)
shape.text = f”{phf.idx}–{shape.name}–{phf.type}”
# 第二个slide
slide=prs.slides.add_slide(prs.slide_layouts[1])
for shape in slide.placeholders:
phf=shape.placheolder_format
print(f”{phf.idx}–{shape.name}–{phf.type}”)
shape.text = f”{phf.idx}–{shape.name}–{phf.type}”
prs.save(**.pptx)

# 2. 段落添加
# 为第一个slide赋值
slide=pre.slides.add_slide(prs.slide_layouts[0])
slide_name=slide.placeholders[1]
slide_2=slide.placeholders[2]
slide_name.text=
slide_2.text=

slide1=prs.slide.add_slide(prs.slide_layouts[1])
shapes=slide1.shapes
title_shape=shapes.title#shape.title 等同于shapes.placeholders[0]
body_shape=shapes.placeholders[1]
# 添加标题文本
title_shape.text=
# 添加段落内容
tf = body_shape.text_frame
# 这句代码就是给body占位符添加内容!
tf.text = “带圆点的符号1”
p = tf.add_paragraph()
# 这个代码表示在原来的基础上,添加第一个段落!
p.text = “带圆点的符号2”
p = tf.add_paragraph()
# 这个代码表示在原来的基础上,添加第二个段落!
p.text = “带圆点的符号3”

prs.save()

给段落设置层级关系

prs=Presentation()
slide=prs.slides.add_slide(prs.slide_layouts[1])
shapes=slied.shapes
title_shape=shapes.title
body_shape=shapes.placeholders[1]
title_shape.text=
tf=body_shape.text_frame
df.text=

p=tf.add_paragraph()
p.text=
p.level=1# 默认层级为0,这个段落设置为1

p=tf.add_paragraph()
p.text=
p.level=2 # 构建一个三层的层级树

样式调整

添加一个文本框

prs=Presentation()
black_slide_layout=prs.slide_layouts[0]
slide=prs.slides.add_slide(black_slide_layout)

left=top=width=height=Cm(3)
text_box=slide.shapes.add_textbox(left,top,width,height)
tf=text_box.text_frame
tf.text=

调整文本框位置

tf.margin_bottom = Cm(0.1) # 下边距
tf.margin_left = 0 # 下边距
tf.vertical_anchor = MSO_ANCHOR.BOTTOM # 对齐文本方式:底端对齐
tf.word_wrap = True # 框中的文字自动换行

文本框颜色调整

fill = text_box.fill
fill.solid()# 纯色填充。
# 使用之前一定要导入RGBColor这个库
fill.fore_color.rgb = RGBColor(247, 150, 70)

文本框边框样式

line = text_box.line
line.color.rgb = RGBColor(255, 0, 0)
line.width = Cm(0.3)

添加段落

p=tf.add_paragraph()
p.text=
p.font.bold=True# 加粗
p.font.size=Pt(40) # 字体大小

段落对齐调整

p.alignment = PP_ALIGN.LEFT

其他调整:

1 .add_run() 添加新的文字块
2. .level
3. .line_spacing
4. .runs
5. .space_after
6. .space_before

字体样式:

1. font.name -&nbsp 字体名称
2. p.font.blod 是否加粗
3. p.font.italic 是否斜体
4. p.font.color 字体颜色
5. p.font.size 字体大小

参考:

官方文档:python-pptx – python-pptx 0.6.18 documentation

Python小二:Python自动化操作PPT看这一篇就够了

pptx 批量操作幻灯片 | Python 技术论坛

python-pptx的基本使用 – 云+社区 – 腾讯云

python自动化办公之python操作PPT_Huang supreme的博客-CSDN博客

如何用python修改pptx,替换ppt的内容 – python,PHP学习

🔥Python操控幻灯片世界!🎨创建、修改全方位,一切由代码定义slide&shapes?

AI时代,掌握AI大模型第一手资讯!AI时代不落人后!

免费ChatGPT问答,办公、写作、生活好得力助手!

扫码右边公众号,驾驭AI生产力!

相关文章