引言
++最近有用到做自动化ppt相关的功能,简单记录一下实现过程的部分操作。++
0 pptx的结构
pptx的存储本质上是一颗树
flowchart LR
pptx --> slides --> shapes --> 组内shapes
pptx --> 幻灯片 --> 模块形状 --> 复合形状内部的形状
1 相关操作
1.1 创建一个pptx类
from pptx import Presentation
ppt_model = Presentation(pptx='path')
1.2 访问pptx的每一个幻灯片
# 根据位置取出slide
slide1 = ppt_model.slides[0]
# 访问每一个slide
for slide in ppt_model.slides:
pass
1.3 访问幻灯片下的形状
shape = shapes[0]
# 遍历每一个shape
for shape in slide.shapes:
print(shape.text)
[注] 并非所有的shape都有text属性,一般具有文本框的shape才有text属性,图表一般没有
1.4 访问shape下的不同属性
1.4.1 shape.text
shape.text = '文本1'
1.4.2 shape.text_frame
修改此属性下的不同属性可以对text文本进行定制化操作
from pptx.util import Pt, Inches
# 修改文字属性
for paragraph in shape.text_frame.paragraphs:
for run in paragraph.runs:
# 设置字体大小为18磅
run.font.size = Pt(18)
# 设置字体为加粗格式
run.font.bold = True
1.5 chart
1.5.1 创建和删除
from pptx.enum.chart import XL_CHART_TYPE
from pptx.chart.data import ChartData
# 删除当前图表
model.slides[i].shapes._spTree.remove(shape.element)
# 创一个新图表
chart = model.slides[i].shapes.add_chart(
chart_type=XL_CHART_TYPE.LINE, # 图表类型-折线
x=left, # 左侧边距
y=top, # 顶部边距
cx=width, # 宽度
cy=height, # 高度
chart_data=chart_data: ChartData()
)
1.5.2 chart_data
from pptx.chart.data import ChartData
# 创建一个新数据类型
chart_data = ChartData()
# 横轴刻度
chart_data.categories = categories: list[]
# 增加一条线的数据
chart_data.add_series(
name= name: str,
values=values: list[],
number_format=None,
)
# 插入多条数据线
for i in range(k):
chart_data.add_series(name, values[k])
【注】个人建议先插入数据画图,数据线属性的修改放在后面
1.5.3 CategoryAxis
图表的类别轴。
category_axis = CategoryAxis
# 刻度标记格式修改
tick_labels = category_axis.tick_labels
1.5.4 Y axis
值轴,也就是Y轴的设定
from pptx.enum.chart import XL_TICL_MARK
value_axis = shapes.chart.value_axis
# 设定主刻度线的间隔为0.1
value_axis.major_unit = 0.1
# 设置次刻度线是否隐藏
value_axis.minor_tick_mark = XL_TICL_MARK.NONE
# 网格样式修改
# 主/次要网格线是否可见
value_axis.has_major_gridlines = False
value_axis.has_minor_gridlines = False
# 刻度标记格式修改
value_axis.has_tick_labels = False
# 设定最小刻度
value_axis.minimum_scale = num: float
# 设定最大刻度
value_axis.maximum_scale = num: float
# 设定显示的刻度间隔
value_axis.major_unit = num: float
# 刻度标记的数字格式0.5-1.0-1.5 一旦设定格式显示的刻度间隔会自动匹配格式,如0.8变成1.0
value_axis.tick_labels.number_format='0.5'
# 文字属性
value_axis.tick_labels.font.size=Pt(8)
# 刻度标签与轴之间的距离
value_axis.tick_labels.offset
# 刻度线的形状和颜色-ChartFormat对象实例
format = value_axis.format
1.5.5 tick_labels
1.5.6 chart.legend
修改图例的相关属性
from pptx.enum.chart import XL_LEGEND_POSITION
# 是否显示图列
chart.has_legend = True
# 图例的字体相关设定
font = chart.legend.font
font.name='Times New Roman'
font.size = Pt(8)
# 图例的位置(默认值位置)
chart.legend.position = XL_LEGEND_POSITION.BOTTOM
# 从图例的默认位置移动,表示为-1.0和1.0之间的浮点数,表示图表宽度的一部分。
chart.legend.horz_offset = -0.1
# 是否在绘图区域放置图例
chart.legend.include_in_layout = True
标签:pptx,Python,chart,value,shape,刻度,随笔,axis
From: https://www.cnblogs.com/mappleyan/p/18298877