Python之pptx实现添加内容与删除(移动)页操作

问题背景

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

基本思路

  1. 使用xlrd模块读取xlsx文件内容
  2. 使用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])

参考文档

feature: reorder a slide #68

原文地址:https://www.cnblogs.com/azureology/p/12349585.html

时间: 2024-10-25 05:40:27

Python之pptx实现添加内容与删除(移动)页操作的相关文章

表格添加内容并进行删除案例

表格都很常见,一般都是用table来写的,今天我就写一个dl和dd布局的表格,并往表格里添加内容,同时点击删除按钮也可以删掉表格内容.来看代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <style> *{ margin:0; p

用C#Winform写个简单的批量清空文件内容和删除文件的小工具

用C#Winform写个简单的批量清空文件内容和删除文件的小工具 本文介绍这个简单得不能再简单的小项目.做这个项目,有以下目的. 1 当然是做个能用的工具 2 学习使用Github 关于用VS2013创建一个项目并添加到Github的教程,请参考(http://www.admin10000.com/document/4004.html).简单来说,就是先用VS创建项目:然后在Github网站上创建一个Respo(本项目的代码托管项目),记下(https://*.git)那个地址:最后用"提交&q

生成 PDF 全攻略【2】在已有PDF上添加内容

项目在变,需求在变,不变的永远是敲击键盘的程序员..... PDF 生成后,有时候需要在PDF上面添加一些其他的内容,比如文字,图片.... 经历几次失败的尝试,终于获取到了正确的代码书写方式. 在此记录总结,方便下次以不变应万变,需要的 jar 请移步:生成PDF全攻略 PdfReader reader = new PdfReader("E:\\A.pdf"); PdfStamper stamper = new PdfStamper(reader, new FileOutputStr

python实现人人网留言获取与一键删除

最近有点着迷Python,学习基本语法之后,首先从爬虫开始,看了<使用python登录人人网并发表状态>一文后,很感兴趣,然后又曾经苦于人人网聊天记录删除的繁琐,于是决定写一个聊天记录一键删除的小脚本,好啦,废话不多说: #encoding:utf-8 import urllib2, urllib, cookielib, re, string class spider(): def __init__(self, email, password): self.email = email self

Linux中添加用户、删除用户时新手可能遇到的问题

Linux中添加用户.删除用户时新手可能遇到的问题  1.创建新用户后切换到新用户:No directory, logging in with HOME=/     添加用户     #sudo useradd -m -s /bin/bash -g group loginname     -m 创建home目录 (不加这个要手动添加目录,不然会出现No directory,Logging in with HOME=/ )     -s /bin/bash 使用bash( 默认为 /bin/sh

Linux下添加删除查看用户操作

1. 添加用户方法一 sudo adduser 1-1. sudo adduser test 添加test用户,同时创建test用户组,并添加test用户到test用户组(这样方式不支持用户名大写) 接下来按提示操作,即可完成添加test的操作 1-2. su test 可切换到test用户 2. 添加用户方法二 sudo useradd 2-1. 首先创建一个组 sudo groupadd Test 创建一个Test组 2-1. 创建一个用户 sudo useradd -s /bin/bash

创建日志文件并在该文件里添加内容

'创建日志文件并在该文件里添加内容 Sub writelog(log) Const forreading =1,forwriting =2,foraddpending=8 Dim fso,f Dim filepath filepath ="C:\log\log.txt" Set fso =createobject("scripting.filesystemobject") If fso.FileExists(filepath) = false Then Set f

【phpcms-v9】如何实现在含有子栏目的栏目下添加内容?

对于题目的解释: 假设现在有一个一级栏目 为:栏目1 其下有二级栏目  :栏目1=>栏目11,栏目1=>栏目12,栏目1=>栏目13 同时栏目1下有文章列表 : 栏目1-----文章1,栏目1-----文章2,栏目1-----文章3,栏目1-----文章4 本篇博文大部分转自于 http://blog.csdn.net/yanhui_wei/article/details/8007569  首先感谢分享 本人抄写本篇博客的目的是为补充和以后的一些这样改动后的bug 一.phpcms-v9

php处理登录、添加数据、删除数据和修改数据

php 处理登录 :需要先建一个登录的页面,用form表单就可以很轻松的完成,(这里的示例是我根据数据库现成的表做的 是一个teacher表格 根据老师的工号和姓名登录的) <form action="chuli.php" method="post"> <div> 工号: <input type="text" name="tno"/> </div> <div> 姓名: