基于python-pptx库中文文档及使用详解
个人使用样例及部分翻译自官方文档,并详细介绍chart的使用
一:基础应用
1.创建pptx文档类并插入一页幻灯片
frompptximportPresentation
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='thisisplaceholders[0]'#在第一个文本框中文字框架内添加文字 body_shape[1].text='thisisplaceholders[1]'#在第二个文本框中文字框架内添加文字
在ppt中所有的元素均被当成一个shape,slide.shapes表示幻灯片类中的模型类,placeholders中为每个模型,采用slide_layouts[1]中包含两个文本框,所以printlen(slide.shapes.placeholders)话为2。
或
title_shape=slide.shapes.title#取本页ppt的title title_shape.text='thisisatitle'#向title文本框写如文字 subtitle=slide.shapes.placeholders[1]#取出本页第二个文本框 subtitle.text='thisisasubtitle'#在第二个文本框中写入文字
由于采用的slide_layouts[1]包含一个标题和一个正文框,所以可以直接取slide.shapes.title表示标题框写入文字亦可
3.在文本框中添加新段落
frompptx.utilimportPt 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='thisisanewtextbox'#文本框中文字 new_para=textbox.text_frame.add_paragraph()#在新文本框中添加段落 new_para.text='thisissecondparaintextbox'#段落文字
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.添加形状
frompptx.enum.shapesimportMSO_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='Step1'
forninrange(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
根据以上代码生成的一页幻灯片如下:
二:chart类
#!/usr/bin/envpython
#encoding:utf-8
frompptximportPresentation
frompptx.chart.dataimportChartData
frompptx.enum.chartimportXL_CHART_TYPE
frompptx.utilimportInches
frompptx.enum.chartimportXL_TICK_MARK
frompptx.utilimportPt
frompptx.dml.colorimportRGBColor
frompptx.enum.chartimportXL_LABEL_POSITION
frompptx.enum.chartimportXL_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表示图表位置,cxcy表示图表宽高,并且插入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#字体位置
#chart2左下方图
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)#新标题字体大小
#chart3右下方图
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)#新标题字体大小
#chart4右上方图
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库中文文档及使用详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。