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
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])
参考文档
Python之pptx实现添加内容与删除(移动)页操作的更多相关文章
- 通过js给某个标签添加内容或者删除标签
添加内容 //先保存div中原来的html var tag = document.getElementById("tag").innerHTML; //构造新的内容 var cou ...
- (一)、vim及gvim添加多行注释及删除多行注释块操作
一.添加多行注释 选中要注释的行(连续的多行): Ctrl + v进入块选择模式: 按住I(大写)进入行首插入模式: 插入注释符: 按Esc回到命令模式. 或者 1. 进入命令行模式,按ctrl ...
- Python的文件输入输出,如何追加内容,读取内容,添加内容
python主要的文件打开的几种访问模式 模式可以为读模式('r').写模式('w')或追加模式('a'),当然还有rb.wb.ab.r+.w+.a+.rb+.wb+.ab+,然而实际从代码上我也没看 ...
- Python实现单链表数据的添加、删除、插入操作
Python实现单链表数据的添加.删除.插入操作 链表的定义: 链表(linked list)是由一组被称为结点的数据元素组成的数据结构,每个结点都包含结点本身的信息和指向下一个结点的地址.由于每个结 ...
- 生成 PDF 全攻略【2】在已有PDF上添加内容
项目在变,需求在变,不变的永远是敲击键盘的程序员..... PDF 生成后,有时候需要在PDF上面添加一些其他的内容,比如文字,图片.... 经历几次失败的尝试,终于获取到了正确的代码书写方式. 在此 ...
- 用C#Winform写个简单的批量清空文件内容和删除文件的小工具
用C#Winform写个简单的批量清空文件内容和删除文件的小工具 本文介绍这个简单得不能再简单的小项目.做这个项目,有以下目的. 1 当然是做个能用的工具 2 学习使用Github 关于用VS2013 ...
- linux下在某行的前一行或后一行添加内容
linux的sed工具是十分强大的,能很容易的实现在某关键词的前一行或后一行增加内容.今天在批量修改tomcat的日志时就用到了该功能. 一.在某行的前一行或后一行添加内容 具休操作如下: #匹配行前 ...
- C#通过Ado.net对连接数据库并进行添加删除等常规操作的代码
如下资料是关于C#通过Ado.net对连接数据库并进行添加删除等常规操作的内容. static string sqlcon = "server=.;database=;Integrated ...
- JavaScript实验一(添加节点,删除节点)
静态html页面: <!DOCTYPE html> <html> <head lang="en"> <meta charset=" ...
随机推荐
- ccf
import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; public class MST { pu ...
- HDU 6274 Master of Sequence (暴力+下整除)
题意 两个1e5的数组a,b,定义\(S(t)=\left \lfloor \frac{t-b_i}{a_i} \right \rfloor\),有三个操作 1 x y:将\(a[x]\)变为\(y\ ...
- python之面向对象01
1.面向过程编程最容易被初学者接受,其往往用一段长代码来实现指定功能,开发过程的思路是将数据与函数按照执行的逻辑顺序组织在一起,数据与函数分开考虑. 2.类与对象 (1)类是抽象的,是有相同属性和行为 ...
- meta 的作用 搜集
Meta标签中的format-detection属性及含义 format-detection翻译成中文的意思是“格式检测”,顾名思义,它是用来检测html里的一些格式的,那关于meta的forma ...
- 1 深入Web请求过程
1.1 B/S网络架构概述 B/S 网络架构从前端到后端都得到了简化,都基于统一的应用层协议HTTP来交互数据,与大多数传统C/S互联网应用程 序采用的长连接的交互模式不同,HTTP采用无状态的短连接 ...
- python练习——第4题
原GitHub地址:https://github.com/Yixiaohan/show-me-the-code 题目:任一个英文的纯文本文件,统计其中的单词出现的个数. 代码: import coll ...
- Vue项目使用vant框架
近期在开发h5端项目,用到vant框架,vant是一款基于Vue的移动UI组件,看了vant的官方文档(https://youzan.github.io/vant/#/zh-CN/)感觉不错,功能比较 ...
- java程序设计原则知多少
程序设计七大原则 一.开闭原则 针对我们设计的功能模块对扩展开放,对修改关闭:利用面向接口(抽象)编程(多态的特性),实现对功能需求扩展的同时,不允许更改原来的代码.提高对象的可复用性.可维护性. ...
- kubernetes集合
kubernetes集合 kubernetes(1):kubernetes简介和组件 kubernetes(2):yum安装kubernetes kubernetes(3):kubeadm安装k8s1 ...
- 小白学 Python 数据分析(8):Pandas (七)数据预处理
人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...