python pptx 从中间加几页_Python之pptx实现添加内容与删除(移动)页操作

问题背景

大量表格数据需要生成指定格式的ppt文件,内容以文字和表格为主,首尾页与内容有固定格式。博主不熟悉VBA操作,希望通过模板用Python完成自动化。

基本思路

使用xlrd模块读取xlsx文件内容

使用pptx模块完成ppt修改

模块版本

本文完成时使用的Python模块版本如下

pip install xlrd==1.2.0 python-pptx==0.6.18

具体实现

数据读取

插入页面

网上有很多关于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

ol = deepcopy(el) #duplicate

slide.shapes._spTree.insert_element_before(ol)

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])

参考文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值