python编程操作office三剑客之PPT篇

安装包

安装pip install python-pptx -i https://pypi.doubanio.com/simple/引用import pptx官方文档https://python-pptx.readthedocs.io/en/latest/

PPT基本概念

在中国的语境下,PowerPoint指微软所提供的那个工具,而PPT则指具体的幻灯片文档。

【Presentation对象】

一个PPT文件在python中被映射为一个Presentation。新建、打开、保存,都是通过Presentation来操作的。

Presentation最关键的属性是:

  • 幻灯片宽度:slide_width
  • 幻灯片高度:slide_height

幻灯片很讲布局,手工是用鼠标拖拽的所见即所得方式,我们可以不很在意幻灯片的实际尺寸。用程序布局幻灯片则不同,必须精确地设定宽度和高度。宽度和高度可以厘米Cm,也可以使用英寸Inch,按自己喜好选择。

prs.slide_width= Cm(25)prs.slide_height= Cm(20)

【版式的问题】

  • 一个Presentation包含多个幻灯片或称幻灯页(slide),每个slide可以一个预设的版式
  • 在不同的版本的office中,具体版式的顺序和数量或许有略差异,由于我们使用PPT多半是用于自己的自动办公,所以看一下自己机器上的版式是什么样的即可。
  • 对于编程来说,最喜欢的版式其实是第6个和第7个:只有标题,或者干脆是空白。这样方便我们自己布局。
  • 通过 Presentation.slides.add_slide(版式) 函数,可以增加一个具体的幻灯页——返回一个slide对象。添加内容,就通过这个slide对象操作。

【slide对象的内容】

  • 向slide对象增加内容,与对word的操作有类似性,但也有一个明显的差别。word中增加内容基本是线性的从上向下,但一个幻灯片中的内容则可以是任意布局的。所以必须明确地指定插入内容的位置。
  • 我们重点看五项内容的操作方式:标题(title)文字(text)图片(picture)表格(table)图表(chart)

1、标题(title)

如果我们希望幻灯页中有一个标题,可以选择title_only的版式。

slide1 = prs.slides.add_slide(title_only_slide_layout) shapes = slide1.shapes shapes.title.text = '幻灯片标题'

如果所选的版式没有标题,或者是我们还想加一个副标题,那么只需按下面加入文字的方法来处理即可。

2、文字(text)

PPT中所有的文字,必须存在于某个文字框(textbox)中。使用add_textbox增加一个文字框,每个文字框,一旦增加,就有了一个默认的段落。这里请对比一下word中的操作,不增加一个paragrah就没有任何段落。

    txBox = shapes.add_textbox(Cm(2), Cm(3.5), Cm(21),Cm(2))    tf = txBox.text_frame    p = tf.paragraphs[0]    p.alignment = PP_ALIGN.CENTER    p.text = '副标题'    p.font.size= Pt(24)

注意这里的代码,增加textbox,必须设定位置和大小,有四个参数,分别是左上角的X、Y坐标和宽度、高度。

这里可以直接设定它的对齐方式、文字内容、字体大小,等等。

3、图片(Picture)

增加图片,除了文件名之外,同样还必须有位置参数,但大小一般不用指定两个值。如果我们想保持图片默认的宽高比,我们只需指定一个参数即可。

left=Cm(0) top = Cm(4) width = Cm(12) shapes.add_picture(img, left, top, width=width)

4、表格(Table)

PPT中的表格的使用思路与Word中的表格有所不同,创建一个表格必须有6个参数,除了4个位置大小参数外,还必须有行、列数的参数。其中的行列宽高会自动均分。

table = shapes.add_table(rows, cols, left, top, width, height).table

默认的表格有表头,如果不想显示表头,可以设定取消。

table.first_row=False

表格内容填写,就是通过cell(x,y)的方式来访问了。

        cell= table.cell(x, y)        tf= cell.text_frame        tf.text='文字内容'        p= tf.paragraphs        p[0].font.bold= True

注意这里我们发现,向表格中添加文字的方式与向文本框中添加文字的方式相同,都是通过首先获得一个text_frame来实现。同样,我们通过获取第一个段落的方式来修改字体,比如这里将文字设置为黑体。

5、图表(chart)

【ChartData对象】

与Excel不同,PPT中的表格没有自动的数据源,所以必须在程序中设定数据。这样使用起来反而更简单了。一个数据就是一个列表list。

完整的表格数据包括:横坐标的数据和每个Series的数据。

chart_data = ChartData()data1=[。。。]data2=[。。。]chart_data.categories= data1chart_data.add_series('', data2)

有了数据之后,还得指定一个图表类型。图表类型有很多,常用的无非还是线图、柱图、饼图那些。在范例代码的最后,附带了所有的图表类型与说明,也可以在官网文档中查到。

【chart对象】

chart=shapes.add_chart(    XL_CHART_TYPE.COLUMN_CLUSTERED, left, top, width, height, chart_data    )

这里是一个柱状图的例子。

【饼图】

相对于柱状图和线图来说,饼图是比较特殊的,这里专门讨论一下。

首先,饼图一般只能显示一个Series,这也很好理解——多个序列看起来会很乱。

饼图中的横坐标,不再是横坐标,而是以图例的方式显示:has_data_labels=True。

chart.has_legend = Truechart.plots[0].has_data_labels = Truedata_labels = chart.plots[0].data_labelsdata_labels.number_format = '0'data_labels.position = XL_LABEL_POSITION.OUTSIDE_END

数据的显示,饼牙角度显示固然直观,但我们一般还希望看到数值,所以必须打开has_data_labels=True。并进行相关设置。

案例

中国各省命名缘由的展示与统计分析。

(0)

相关推荐