python-pptx库的个人优化

    因为工作原因,最近一直在使用python-pptx这个库,库的功能比较完备,但是通过paragraphs和runs来定位某处需要修改的地方在实现起来比较花费时间,并且针对于一些需要不定时修改格式模板的ppt这种定位方式会带来极其大的工作量,后来我在使用python docxtemplate库时发现这种在ppt中插入变量然后用python来渲染变量赋值的方式很便捷,更利于ppt模板的维护,修改,所以写了这个函数,不用区分页码,而且可以保存变量书写时的文字格式,比如字体啊颜色什么的,遍历ppt中所有元素然后渲染保存。

例:

 

渲染:

渲染结果:

我要上代码啦:

from pptx import Presentation
import pptx
import re
__author__='chs'
def render(path_open,dic,path_save):##这个函数用来渲染全局文本框内文字并保留格式,参数path_open是需修改的ppt路径,dic是渲染字典,path_save是另存为地址
    p=-1;s=-1;t=-1;r=-1
    reelyment="chs(.+?)chs"
    comelyment=re.compile(reelyment)
    prs=Presentation(path_open)
    for page in prs.slides:
        p=p+1
        s=-1
        for shape in page.shapes:
            s=s+1
            t=-1
            if isinstance(shape,pptx.shapes.placeholder.SlidePlaceholder)==True or isinstance(shape,pptx.shapes.autoshape.Shape)==True:
                for parag in shape.text_frame.paragraphs:
                    t=t+1
                    r=-1
                    for runchs in parag.runs:
                        r=r+1
                        count=comelyment.findall(runchs.text)
                        if len(count)!=0:
                            try:
                                prs.slides[p].shapes[s].text_frame.paragraphs[t].runs[r].text=prs.slides[p].shapes[s].text_frame.paragraphs[t].runs[r].text.replace(count[0],dic.get(count[0])).replace('chs','').replace(" ","")
                            except TypeError:
                                raise  TypeError('%s变量未指定,看看变量名字是不是写错了,赋值是不是str类型,不是str写不到ppt里'%(count[0]))
    prs.save(path_save)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值