Python-pptx學習隨筆

mappleyan發表於2024-07-12

引言

++最近有用到做自動化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

相關文章