【python办公自动化(18)】编程实现PPT文档内容样式批量调整(根据占位符进行ppt内容的输入)

文本框样式的调整

import os
os.chdir("D:\\python_major\\auto_office18")
from pptx import Presentation
from pptx.enum.text import MSO_ANCHOR,MSO_AUTO_SIZE
from pptx.util import Cm
from pptx.dml.color import RGBColor

prs = Presentation()
bullet_slide_layout = prs.slide_layouts[6]
slide = prs.slides.add_slide(bullet_slide_layout)

left = top =  Cm(3)
height = Cm(2)
width = Cm(10)
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 #框中文字自动换行

prs.save('test.pptx')

–> 输出结果为:
在这里插入图片描述

文本框背景颜色调整

from pptx.dml.color import RGBColor

text_box =slide.shapes.add_textbox(left,top,width,height)
fill = text_box.fill
fill.solid()
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.Alignment = 对齐方式
from pptx.enum.text import PP_ALIGN

p = tf.add_paragraph()
p.text = '这是第二段文字'
p.alignment = PP_ALIGN.RIGHT

–> 输出结果为:
在这里插入图片描述

段落其他样式调整

与word中的使用非常相似
.add_run() 添加新的文字块
.level 段落缩进层级
.line_spacing 段落行间距
.runs 段落内的文字块
.space_after 段后距
.space_before 段前距

字体样式调整

.font.name 字体名称(可以直接设定为中文字体)
.font.bold 是否加粗
.font.italic 是否斜体
.font.color 字体颜色
.font.size 字体大小
from pptx.util import Pt
from pptx.dml.color import RGBColor

p = tf.add_paragraph()
p.text = '这是第二段文字'
p.alignment = PP_ALIGN.RIGHT
p.font.name = '微软雅黑'
p.font.bold = True
p.font.color.rgb = RGBColor(0,150,70)
p.font.size = Pt(30)

–> 输出结果为:
在这里插入图片描述

综合应用

编写一个Python程序,要求

(1) 打开文件第四节课作业模板.pptx

(2) 参考第四节课作业最终成果参考.pptx的最中效果

(3) 用编程的方式从模板文件来复现最终效果

作业模板.pptx 的模板样式如下
在这里插入图片描述
最终成果参考.pptx 的样式为:
在这里插入图片描述

参考代码

步骤一、前期准备

import os
os.chdir("D:\\python_major\\auto_office18")
from pptx import Presentation
from pptx.enum.text import MSO_ANCHOR,MSO_AUTO_SIZE
from pptx.util import Cm,Pt
from pptx.dml.color import RGBColor
import datetime

该部分代码完成的功能是:设置程序运行路径、导入相关的库

步骤二、查找模板信息和占位符

需要先把“第四节课作业模板.pptx”打开后,进入到视图窗口下点击“幻灯片母版”,然后在左侧slide中找到幻灯片1所使用的样式,具体操作如下

首先,打开文件进入出事界面,然后点击菜单栏里的“视图”

在这里插入图片描述

其次,选择幻灯片母版

在这里插入图片描述

接着,进入母版中找到幻灯片1所使用的样式slide(表格布局样式)

这时候鼠标放在侧的红色框内,会自动弹出一个提示框 --> 表格布局 版式:由幻灯片 1 使用。这时候就找到了模板中幻灯片所对应的的板式,需要记住其编号(也就是序号16)
在这里插入图片描述

最后,通过代码获得相应的占位符spaceholders
prs = Presentation("第四节课作业模板.pptx")
slide = prs.slides.add_slide(prs.slide_layouts[16])
for shape in slide.placeholders:
	phf = shape.placeholder_format
	print(f'{phf.idx}--{shape.name}--{phf.type}')

–> 输出结果为:
在这里插入图片描述

检验,在for循环的最后一步加上如下代码然后再保存
shape.text = f'{phf.idx}--{phf.type}'

–> 输出结果为:
在这里插入图片描述
至此,模板信息和占位符的查找就已经完毕,接下来就是想pptx里面写入内容了

步骤三、向pptx中写入内容

首先、插入title和body
body = slide.placeholders[1]
title = slide.placeholders[0]

title.text = "财务信息"
body.text = "LOREM IPSUM DOLOR SIT AMET, CONSECTETUER ADIPISCING ELIT.MAECENAS PORTTITOR"
其次、插入图片

通过图片占位符插入图片,这里使用的方法不是add_picture而是insert_picture的方法,这里需要注意把模板中的图片另存到程序的运行路径下,保存的类型为png格式

pic = slide.placeholders[13]
pic.insert_picture("图片1.png")
然后、插入最下端的标识页数和日期
top = Cm(15.6)
left = Cm(28)
height = width = Cm(3)
today = datetime.datetime.today()
bottom_date = "{} 年 {} 月 {} 日".format(today.year,today.month,today.day)
text_box = slide.shapes.add_textbox(left,top,height,width)
tf = text_box.text_frame
p = tf.add_paragraph()
p.text = bottom_date
p.font.name = '微软雅黑'
p.font.size= Pt(12)
p.font.color.rgb = RGBColor(255,255,255)

top = Cm(15.6)
left = Cm(2.25)
height = width = Cm(2)
text_box = slide.shapes.add_textbox(left,top,height,width)
tf = text_box.text_frame
p = tf.add_paragraph()
p.text = "1"
p.font.name = '微软雅黑'
p.font.size= Pt(12)
p.font.color.rgb = RGBColor(255,255,255)
最后、处理表格占位符

这里和处理图片占位符的方式类似,使用的insert_table方法,查看了官方示例以及百度了很多文档及别人分享的代码,只看到过如何通过表格占位符插入表格已经向表格中写入元素,以及对表格的合并和拆解,但是没有找到相关对于表格属性(填充)以及文字属性(大小、字体、对齐方式等),这里就只能按照默认生成的样式进行输出

table = slide.placeholders[14]
table.top = Cm(1)
table.left = Cm(12)

data =[
	["","2017","2018","2019",""],
	["用户","50,000","400,000","1,600,000",""],
	["作业","500,000","4,000,000","16,000,000",""],
	["每个作业的平均价格","75","80","90",""],
	["公司收入 @ 15%","5,625,000","48,000,000","216,000,000",""],
	["- 营业成本","0","0","0",""],
	["毛利润","5,625,000","48,000,000","216,000,000",""],
	["运营成本","","","",""],
	["- 市场营销","5,062,500","38,400,000","151,200,000","70%"],
	["- 客户服务","1,687,500","9,600,000","21,600,000","10%"],
	["- 产品开发","562,500","2,400,000","10,800,000","5%"],
	["- 杂项费","281,250","2,400,000","4,320,000","2%"],
	["总运营成本","7,596,750","52,800,000","187,920,000",""],
	["EBIT","-1,968,750","-4,800,000","28,080,000","13%"]
]

rows,cols = 14,5
table = table.insert_table(rows,cols).table

table.columns[0].width = Cm(6.5)
table.columns[1].width = Cm(4)
table.columns[2].width = Cm(4)
table.columns[3].width = Cm(4)
table.columns[4].width = Cm(2)


for row in range(rows):
	for col in range(cols):
		table.cell(row,col).text = str(data[row][col])

–> 输出结果为:
在这里插入图片描述

全部代码

import os
os.chdir("D:\\python_major\\auto_office18")
from pptx import Presentation
from pptx.enum.text import MSO_ANCHOR,MSO_AUTO_SIZE
from pptx.util import Cm,Pt
from pptx.dml.color import RGBColor
import datetime


prs = Presentation("第四节课作业模板.pptx")
slide = prs.slides.add_slide(prs.slide_layouts[16])
for shape in slide.placeholders:
	phf = shape.placeholder_format
	print(f'{phf.idx}--{shape.name}--{phf.type}')
	#shape.text = f'{phf.idx}--{phf.type}' 用来验证模板信息

pic = slide.placeholders[13]
body = slide.placeholders[1]
title = slide.placeholders[0]
table = slide.placeholders[14]
#如何设置占位符的位置
table.top = Cm(1)
table.left = Cm(12)


#如何在占位符里面插入图片,使用insert_picture,如果使用shapes添加的话,可以尝试一下会是什么样子的输出
pic.insert_picture("图片1.png")
body.text = "LOREM IPSUM DOLOR SIT AMET, CONSECTETUER ADIPISCING ELIT.MAECENAS PORTTITOR"
title.text = "财务信息"

data =[
	["","2017","2018","2019",""],
	["用户","50,000","400,000","1,600,000",""],
	["作业","500,000","4,000,000","16,000,000",""],
	["每个作业的平均价格","75","80","90",""],
	["公司收入 @ 15%","5,625,000","48,000,000","216,000,000",""],
	["- 营业成本","0","0","0",""],
	["毛利润","5,625,000","48,000,000","216,000,000",""],
	["运营成本","","","",""],
	["- 市场营销","5,062,500","38,400,000","151,200,000","70%"],
	["- 客户服务","1,687,500","9,600,000","21,600,000","10%"],
	["- 产品开发","562,500","2,400,000","10,800,000","5%"],
	["- 杂项费","281,250","2,400,000","4,320,000","2%"],
	["总运营成本","7,596,750","52,800,000","187,920,000",""],
	["EBIT","-1,968,750","-4,800,000","28,080,000","13%"]
]

rows,cols = 14,5
#如何插入表格
table = table.insert_table(rows,cols).table

table.columns[0].width = Cm(6.5)
table.columns[1].width = Cm(4)
table.columns[2].width = Cm(4)
table.columns[3].width = Cm(4)
table.columns[4].width = Cm(2)


for row in range(rows):
	for col in range(cols):
		table.cell(row,col).text = str(data[row][col])


top = Cm(15.6)
left = Cm(28)
height = width = Cm(3)
today = datetime.datetime.today()
bottom_date = "{} 年 {} 月 {} 日".format(today.year,today.month,today.day)
text_box = slide.shapes.add_textbox(left,top,height,width)
tf = text_box.text_frame
p = tf.add_paragraph()
p.text = bottom_date
p.font.name = '微软雅黑'
p.font.size= Pt(12)
p.font.color.rgb = RGBColor(255,255,255)

top = Cm(15.6)
left = Cm(2.25)
height = width = Cm(2)
text_box = slide.shapes.add_textbox(left,top,height,width)
tf = text_box.text_frame
p = tf.add_paragraph()
p.text = "1"
p.font.name = '微软雅黑'
p.font.size= Pt(12)
p.font.color.rgb = RGBColor(255,255,255)

prs.save("test.pptx")

最后表格属性和表格类文字属性的设置通过在ppt里面直接手动操作,输出的最中结果如下
在这里插入图片描述

发布了37 篇原创文章 · 获赞 10 · 访问量 4628

猜你喜欢

转载自blog.csdn.net/lys_828/article/details/104133482
今日推荐