Python之pptx实现添加内容与删除(移动)页操作
问题背景
大量表格数据需要生成指定格式的ppt文件,内容以文字和表格为主,首尾页与内容有固定格式。博主不熟悉VBA操作,希望通过模板用Python完成自动化。
基本思路
- 使用
xlrd
模块读取xlsx文件内容 - 使用
pptx
模块完成ppt修改
模块版本
本文完成时使用的Python模块版本如下
pip install xlrd==1.2.0 python-pptx==0.6.18
具体实现
数据读取
有关xls读取参考我的博文:Python之xlrd模块读取xls文件与报错解决
插入页面
网上有很多关于pptx的参考资料,很快可以上手并新建新的幻灯片页(slide):
from pptx import Presentation prs = Presentation('template.pptx') def new_slide(idx): 'Add slide with layout, 0 = title, 1 = content, 2 = ending' layout = prs.slide_layouts[idx] slide = prs.slides.add_slide(layout) return slide
上述代码支持根据幻灯片版式(layout)生成不同的空白页,如模板定义0标题1内容2结尾。具体版式可在ppt菜单【视图】-【幻灯片母版】中进行编辑。
缺陷:新建slide会自动添加到末尾页,无法移动。
写入内容
在Office 2007之后的pptx文件本质上是一个结构化的xml压缩包,而xml中的段落决定了每一页的元素的模板、内容、格式、字体、大小、位置等,因此通过搜过xml文件中不同的内容即可快速定位到需要修改的字段。
在ppt中每个元素都抽象为shape,对于表格,我的方案是在模板中做好格式并使用deepcopy复制到新的页面再修改内容。
from copy import deepcopy slide = new_slide(1) #content slide slide.shapes.title.text = '本页标题' el = prs.slides[1].shapes[2].element #table in template slide.shapes._spTree.insert_element_before(deepcopy(el)) #duplicate table = slide.shapes[1].table #table in new slide table.cell(1,1).text_frame.paragraphs[0].runs[0].text = '表格内容'
删除页面
官方issue指出无法移动slide可通过remove+insert间接实现,比较繁琐。
问题简化:尾部批量添加新容页结和尾最页,后删去模板二三页。
【模板开头】【模板内容】【模板结尾】【新内容1】【新内容2】……【新结尾】
def del_slide(index): slides = list(prs.slides._sldIdLst) prs.slides._sldIdLst.remove(slides[index])
参考文档
相关推荐
YENCSDN 2020-11-17
lsjweiyi 2020-11-17
houmenghu 2020-11-17
Erick 2020-11-17
HeyShHeyou 2020-11-17
以梦为马不负韶华 2020-10-20
lhtzbj 2020-11-17
夜斗不是神 2020-11-17
pythonjw 2020-11-17
dingwun 2020-11-16
lhxxhl 2020-11-16
坚持是一种品质 2020-11-16
染血白衣 2020-11-16
huavhuahua 2020-11-20
meylovezn 2020-11-20
逍遥友 2020-11-20
weiiron 2020-11-16