目录
- 1. 安装pptx
- 2. 文本替换和插入图片
- 3. 生成表格
1. 安装pptx
pip install python-pptx
2. 文本替换和插入图片
- 文本通过占位符例如
{{$xxx}}
进行标记,然后进行替换;图片通过ppt中的图形和图片中的占位符进行标记 - ppt如下

from pptx import Presentation
from pptx.enum.shapes import MSO_SHAPE_TYPE
prs = Presentation('ppt.pptx')
new_image_path = 'python.png'
for slide in prs.slides:for shape in slide.shapes:if shape.has_text_frame:if "{{$keyValue_text}}" in shape.text:shape.text = shape.text.replace("{{$keyValue_text}}", "文本替换后的内容")if shape.has_table:for row in shape.table.rows:for cell in row.cells:if "{{$keyValue_table}}" in cell.text:cell.text = cell.text.replace('{{$keyValue_table}}', '表格替换后的内容')if shape.shape_type == MSO_SHAPE_TYPE.AUTO_SHAPE:if '{{$image}}' in shape.text:slide.shapes._spTree.remove(shape.element)left = shape.lefttop = shape.topwidth = shape.widthheight = shape.heightslide.shapes.add_picture(new_image_path, left, top, width, height)
prs.save('new_ppt.pptx')

3. 生成表格
- 定义一个表格,并设置表格的名称
{{$table}}
,表格只包含表头,根据提供的数据动态追加行并填充数据 - 点击选择窗格,选择ppt中的表格,设置表格名称
{{$table}}

from pptx import Presentation
from copy import deepcopy
def find_table_by_identifier(slide, identifier):for shape in slide.shapes:if shape.has_table and shape.name == identifier:return shape.tablereturn None
def add_row_to_table(table):new_row = deepcopy(table._tbl.tr_lst[-1])table._tbl.append(new_row)
def add_data_to_table(table, data):rows_to_add = len(data)for _ in range(rows_to_add):add_row_to_table(table)for i, row_data in enumerate(data):for j, cell_content in enumerate(row_data):cell_text = str(cell_content)table.cell(i + 1, j).text = cell_text
data = [["张三", 28, "北京"],["李四", 22, "上海"],["王五", 35, "广州"]
]
ppt_path = 'table.pptx'
save_path = 'new_table.pptx'
prs = Presentation(ppt_path)
for slide in prs.slides:table = find_table_by_identifier(slide, "{{$table}}")if table is not None:add_data_to_table(table, data)prs.save(save_path)
