基于python-pptx库中文文档及使用详解


Posted in Python onFebruary 14, 2020

个人使用样例及部分翻译自官方文档,并详细介绍chart的使用

一:基础应用

1.创建pptx文档类并插入一页幻灯片

from pptx import Presentation
prs = Presentation()
slide = prs.slides.add_slide(prs.slide_layouts[1])
# 对ppt的修改
prs.save('python-pptx.pptx')

prs.slide_layouts中一共预存有1-48种,采用第六种为空白幻灯片

例slide_layouts[1]为带标题和正文框的ppt,slide_layouts[6]为空白页ppt

slide 及为一页‘幻灯片类'

修改完后 prs.save('name.pptx') 保存ppt

2.在创建的这页幻灯片文本框中添加文字

body_shape = slide.shapes.placeholders # body_shape为本页ppt中所有shapes
body_shape[0].text = 'this is placeholders[0]' # 在第一个文本框中文字框架内添加文字
body_shape[1].text = 'this is placeholders[1]' # 在第二个文本框中文字框架内添加文字

在ppt中所有的元素均被当成一个shape,slide.shapes表示幻灯片类中的模型类,placeholders中为每个模型,采用slide_layouts[1]中包含两个文本框,所以print len(slide.shapes.placeholders) 话为 2。

title_shape = slide.shapes.title # 取本页ppt的title
title_shape.text = 'this is a title' # 向title文本框写如文字
subtitle = slide.shapes.placeholders[1] # 取出本页第二个文本框
subtitle.text = 'this is a subtitle' # 在第二个文本框中写入文字

由于采用的slide_layouts[1]包含一个标题和一个正文框,所以可以直接取slide.shapes.title 表示标题框写入文字亦可

3.在文本框中添加新段落

from pptx.util import Pt
new_paragraph = body_shape[1].text_frame.add_paragraph() # 在第二个shape中的文本框架中添加新段落
new_paragraph.text = 'add_paragraph' # 新段落中文字
new_paragraph.font.bold = True # 文字加粗
new_paragraph.font.italic = True # 文字斜体
new_paragraph.font.size = Pt(15) # 文字大小
new_paragraph.font.underline = True # 文字下划线
new_paragraph.level = 1 # 新段落的级别

add_paragraph中的文字支持修改font

pptx.util 中为Pt为文字大小设置

4.添加新文本框

left = top = width = height = Inches(5) # 预设位置及大小
textbox = slide.shapes.add_textbox(left, top, width, height) # left,top为相对位置,width,height为文本框大小
textbox.text = 'this is a new textbox' # 文本框中文字
new_para = textbox.text_frame.add_paragraph() # 在新文本框中添加段落
new_para.text = 'this is second para in textbox' # 段落文字

5.添加图片

img_path = 'img_path.jpg' # 文件路径
left, top, width, height = Inches(1), Inches(4.5), Inches(2), Inches(2) # 预设位置及大小
pic = slide.shapes.add_picture(img_path, left, top, width, height) # 在指定位置按预设值添加图片

6.添加形状

from pptx.enum.shapes import MSO_SHAPE
left, top, width, height = Inches(1), Inches(3), Inches(1.8), Inches(1) # 预设位置及大小
shape = slide.shapes.add_shape(MSO_SHAPE.PENTAGON, left, top, width, height) # 在指定位置按预设值添加类型为PENTAGON的形状
shape.text = 'Step 1'
for n in range(2, 6):
  left = left + width - Inches(0.3)
  shape = slide.shapes.add_shape(MSO_SHAPE.CHEVRON, left, top, width, height)
  shape.text = 'Step{}'.format(n)

MSO_SHAPE中有office中各类型形状,详见:https://msdn.microsoft.com/en-us/library/office/ff862770(v=office.15).aspx

7.添加表格

rows, cols, left, top, width, height = 2, 2, Inches(3.5), Inches(4.5), Inches(6), Inches(0.8)
table = slide.shapes.add_table(rows, cols, left, top, width, height).table # 添加表格,并取表格类
table.columns[0].width = Inches(2.0) # 第一纵列宽度
table.columns[1].width = Inches(4.0) # 第二纵列宽度
table.cell(0, 0).text = 'text00' # 指定位置写入文本
table.cell(0, 1).text = 'text01'
table.cell(1, 0).text = 'text10'
table.cell(1, 1).text = 'text11'

8.demo

根据以上代码生成的一页幻灯片如下:

基于python-pptx库中文文档及使用详解

二:chart类

#!/usr/bin/env python
# encoding: utf-8
 
from pptx import Presentation
from pptx.chart.data import ChartData
from pptx.enum.chart import XL_CHART_TYPE
from pptx.util import Inches
from pptx.enum.chart import XL_TICK_MARK
from pptx.util import Pt
from pptx.dml.color import RGBColor
from pptx.enum.chart import XL_LABEL_POSITION
from pptx.enum.chart import XL_LEGEND_POSITION
 
prs = Presentation()
 
slide = prs.slides.add_slide(prs.slide_layouts[6]) # 在幻灯片中加入一页6号风格(空白)幻灯片
 
# chart1 左上方图
x, y, cx, cy = Inches(0.5), Inches(0.5), Inches(4), Inches(3) # 按英尺标准指定x,y值
 
chart_data = ChartData() # 图表data类
 
chart_data.categories = [u'A班级得分率', u'B班级得分率'] # 图表加入两栏
chart_data.add_series(u'得分率对比', (80.5, 60.5)) # 在两栏分别填入数据
 
graphic_frame = slide.shapes.add_chart(
  XL_CHART_TYPE.COLUMN_CLUSTERED, x, y, cx, cy, chart_data
) # add_chart(图表类型,xy表示图表位置,cx cy表示图表宽高,并且插入chart_data中规定好的数据)
 
chart = graphic_frame.chart # 从生成的图表中取出图表类
chart.chart_style = 21 # 图表整体颜色风格
 
chart.has_title = True # 图表是否含有标题,默认为False
chart.chart_title.text_frame.clear() # 清除原标题
new_paragraph = chart.chart_title.text_frame.add_paragraph() # 添加一行新标题
new_paragraph.text = '得分率对比' # 新标题
new_paragraph.font.size = Pt(15) # 新标题字体大小
 
category_axis = chart.category_axis # category_axis 为chart的category控制类
category_axis.has_major_gridlines = True # 是否显示纵轴线
category_axis.tick_labels.font.italic = True # tick_labels为图表下标签,置为斜体
category_axis.tick_labels.font.size = Pt(15) # 下标签字体大小
category_axis.tick_labels.font.color.rgb = RGBColor(255, 0, 0) # 标签字体颜色
 
value_axis = chart.value_axis # value_axis 为chart的value控制类
value_axis.maximum_scale = 100.0 # 纵坐标最大值
value_axis.minimum_scale = 0.0 # 纵坐标最小值
value_axis.minor_tick_mark = XL_TICK_MARK.CROSS
value_axis.has_minor_gridlines = True
 
tick_labels = value_axis.tick_labels # tick_labels 为chart的纵轴标签控制类
tick_labels.number_format = '0%' # 标签显示样式
tick_labels.font.bold = True # 字体加粗
tick_labels.font.size = Pt(14) # 字体大小
tick_labels.font.color.rgb = RGBColor(0, 255, 0) # 标签颜色
 
plot = chart.plots[0] # 取图表中第一个plot
plot.has_data_labels = True # 是否显示数据标签
data_labels = plot.data_labels # 数据标签控制类
data_labels.font.size = Pt(13) # 字体大小
data_labels.font.color.rgb = RGBColor(0, 0, 255) # 字体颜色
data_labels.position = XL_LABEL_POSITION.INSIDE_END # 字体位置
 
# chart 2 左下方图
x, y, cx, cy = Inches(0.5), Inches(3.5), Inches(4), Inches(3) # 按英尺标准指定x,y值
chart_data = ChartData()
chart_data.categories = ['A', 'B', 'C', 'D']
chart_data.add_series(u'A班级选项占比', (80, 10, 9, 10))
chart = slide.shapes.add_chart(
  XL_CHART_TYPE.PIE, x, y, cx, cy, chart_data
).chart # PIE为饼状图
 
chart.has_legend = True # 是否含有下方的说明
chart.legend.position = XL_LEGEND_POSITION.BOTTOM
chart.legend.horz_offset = 0 # 说明位移量 [-1, 1] 默认为0
 
chart.plots[0].has_data_labels = True # 饼中是否写入数值
data_labels = chart.plots[0].data_labels
data_labels.number_format = '0%' # 数值显示格式
data_labels.position = XL_LABEL_POSITION.INSIDE_END # 数值布局方式
 
chart.has_title = True
chart.chart_title.text_frame.clear() # 清除原标题
new_paragraph = chart.chart_title.text_frame.add_paragraph() # 添加一行新标题
new_paragraph.text = 'A班级选项占比' # 新标题
new_paragraph.font.size = Pt(13) # 新标题字体大小
 
# chart 3 右下方图
x, y, cx, cy = Inches(5.5), Inches(4), Inches(4), Inches(3) # 按英尺标准指定x,y值
chart_data = ChartData()
chart_data.categories = ['A', 'B', 'C', 'D']
chart_data.add_series(u'B班级选项占比', (0.1, 0.2, 0.3, 0.4))
chart = slide.shapes.add_chart(
  XL_CHART_TYPE.PIE, x, y, cx, cy, chart_data
).chart
 
chart.has_legend = True
chart.legend.position = XL_LEGEND_POSITION.BOTTOM
 
chart.plots[0].has_data_labels = True
data_labels = chart.plots[0].data_labels
data_labels.number_format = '0%'
data_labels.position = XL_LABEL_POSITION.INSIDE_END
 
chart.has_title = True
chart.chart_title.text_frame.clear() # 清除原标题
new_paragraph = chart.chart_title.text_frame.add_paragraph() # 添加一行新标题
new_paragraph.text = 'B班级选项占比' # 新标题
new_paragraph.font.size = Pt(13) # 新标题字体大小
 
 
# chart 4 右上方图
x, y, cx, cy = Inches(5.5), Inches(0.5), Inches(4), Inches(3)
chart_data = ChartData()
chart_data.categories = ['0', '1-3', '4-6', '7-9']
chart_data.add_series('', (50, 18, 30, 34))
chart = slide.shapes.add_chart(
  XL_CHART_TYPE.PIE, x, y, cx, cy, chart_data
).chart
 
chart.has_legend = True
chart.legend.position = XL_LEGEND_POSITION.BOTTOM
chart.legend.font.size = Pt(13)
 
chart.plots[0].has_data_labels = True
data_labels = chart.plots[0].data_labels
data_labels.number_format = '0%'
data_labels.position = XL_LABEL_POSITION.INSIDE_END
 
chart.has_title = True
chart.chart_title.text_frame.clear()
new_title = chart.chart_title.text_frame.add_paragraph()
new_title.text = '得分占比'
new_title.font.size = Pt(13)
 
prs.save('test.pptx')

生成demo:

基于python-pptx库中文文档及使用详解

以上这篇基于python-pptx库中文文档及使用详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python在Windows8下获取本机ip地址的方法
Mar 14 Python
Python中处理字符串的相关的len()方法的使用简介
May 19 Python
人生苦短我用python python如何快速入门?
Mar 12 Python
Python异常处理操作实例详解
May 10 Python
关于PyTorch源码解读之torchvision.models
Aug 17 Python
python配置文件写入过程详解
Oct 19 Python
详解Django CAS 解决方案
Oct 30 Python
Django Haystack 全文检索与关键词高亮的实现
Feb 17 Python
详解Python中Pyyaml模块的使用
Oct 08 Python
python opencv旋转图片的使用方法
Jun 04 Python
Python制作表白爱心合集
Jan 22 Python
详解Python+OpenCV绘制灰度直方图
Mar 22 Python
python pptx复制指定页的ppt教程
Feb 14 #Python
打包PyQt5应用时的注意事项
Feb 14 #Python
如何使用Python抓取网页tag操作
Feb 14 #Python
python使用python-pptx删除ppt某页实例
Feb 14 #Python
使用python-pptx包批量修改ppt格式的实现
Feb 14 #Python
python在不同条件下的输入与输出
Feb 13 #Python
深入浅析python的第三方库pandas
Feb 13 #Python
You might like
谈谈PHP的输入输出流
2007/02/14 PHP
PHP 根据IP地址控制访问的代码
2010/04/22 PHP
PHP strncasecmp字符串比较的小技巧
2011/01/04 PHP
php 解压rar文件及zip文件的方法
2014/05/05 PHP
asp 的 分词实现代码
2007/05/24 Javascript
jQuery+JSON+jPlayer实现QQ空间音乐查询功能示例
2013/06/17 Javascript
浅谈JavaScript中setInterval和setTimeout的使用问题
2015/08/01 Javascript
基于Jquery实现表单验证
2020/07/20 Javascript
Bootstrap每天必学之简单入门
2015/11/19 Javascript
JS获取月份最后天数、最大天数与某日周数的方法
2015/12/08 Javascript
Sublime Text 3常用插件及安装方法
2015/12/16 Javascript
jquery select插件异步实时搜索实例代码
2017/10/20 jQuery
JS中判断字符串存在和非空的方法
2018/09/12 Javascript
Python之自动获取公网IP的实例讲解
2017/10/01 Python
解决Python的str强转int时遇到的问题
2018/04/09 Python
基于python批量处理dat文件及科学计算方法详解
2018/05/08 Python
Pycharm以root权限运行脚本的方法
2019/01/19 Python
numpy和pandas中数组的合并、拉直和重塑实例
2019/06/28 Python
Django MEDIA的配置及用法详解
2019/07/25 Python
python Kmeans算法原理深入解析
2019/08/23 Python
numpy np.newaxis 的实用分享
2019/11/30 Python
python如何实现DES加密
2020/09/21 Python
python画图时设置分辨率和画布大小的实现(plt.figure())
2021/01/08 Python
css3 盒模型以及box-sizing属性全面了解
2016/09/20 HTML / CSS
KIEHL’S科颜氏官方旗舰店:源自美国的顶级护肤品牌
2018/06/07 全球购物
STAUD官方网站:洛杉矶独有的闲适风格
2019/04/11 全球购物
The North Face官方旗舰店:美国著名户外品牌
2020/09/28 全球购物
大学毕业生自荐书怎么写?
2014/01/06 职场文书
行政副总岗位职责
2014/02/23 职场文书
小学红领巾广播稿(3篇)
2014/09/13 职场文书
2014年终个人工作总结
2014/11/07 职场文书
2014年信息技术工作总结
2014/12/16 职场文书
5.12护士节活动总结
2015/02/10 职场文书
中学教师个人总结
2015/02/10 职场文书
家庭教育教师培训学习体会
2016/01/14 职场文书
2019教师的学习计划
2019/06/25 职场文书