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.left
top = shape.top
width = shape.width
height = shape.height
slide.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.table
return 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)
