纯净、安全、绿色的下载网站

首页|软件分类|下载排行|最新软件|IT学院

当前位置:首页IT学院IT技术

Python办公自动化PPT转换 Python办公自动化PPT批量转换操作

somenzz   2021-09-14 我要评论
想了解Python办公自动化PPT批量转换操作的相关内容吗somenzz在本文为您仔细讲解Python办公自动化PPT转换的相关知识和一些Code实例欢迎阅读和指正我们先划重点:Python办公自动化,Python批量转换ppt下面大家一起来学习吧

如果你有一堆 PPT 要做他们的格式是一样的只是填充的内容不一样那你就可以使用 Python 来减轻你的负担

PPT 分为内容和格式用 Python 操作 PPT就是利用 Python 对 PPT 的内容进行获取和填充修改 PPT 的格式并不是 Python 的强项因此当你有一堆 PPT 要做的时候先做好一个带格式的 PPT然后用 Python 复制这个 PPT 文件然后再对其进行读写

python-pptx 模块的安装

pip install python-pptx

读取 PPT

假如文件「测试.pptx」的内容如下:

那么以下代码可以读取其内容:

from pptx import Presentation
prs = Presentation("测试.pptx")
for index, slide in enumerate(prs.slides):
    print(f"第 {index+1} 页")
    for shape in slide.shapes:
        if shape.has_text_frame:
            text_frame = shape.text_frame
            # print(text_frame.text)
            # 如果分段读就用下面的代码
            for paragraph in text_frame.paragraphs:
                print(paragraph.text)

执行结果如下所示:

 

写入 PPT

先来个简单点的

假如要生成如下图所示的 PPT 页

代码可以这样写:

from pptx import Presentation
prs = Presentation()
title_slide_layout = prs.slide_layouts[0]
slide = prs.slides.add_slide(title_slide_layout)
title = slide.shapes.title
subtitle = slide.placeholders[1]
title.text = "Hello, World!"
subtitle.text = "python-pptx was here!"
prs.save('test.pptx')

添加一张幻灯片

幻灯片都有板式同样的pptx 提供了 9 种版式让我们选择分别是:

  • Title (presentation title slide)
  • Title and Content
  • Section Header (sometimes called Segue)
  • Two Content (side by side bullet textboxes)
  • Comparison (same but additional title for each side by side content box)
  • Title Only
  • Blank
  • Content with Caption
  • Picture with Caption

分别对应 PPT 的如下版式我已经用数据一一标出:

比如现在要添加一张标题和内容的版式就可以这样写代码:

from pptx import Presentation
prs = Presentation()
SLD_LAYOUT_TITLE_AND_CONTENT = 1  ##标题和内容版式的序号
slide_layout = prs.slide_layouts[SLD_LAYOUT_TITLE_AND_CONTENT]
slide = prs.slides.add_slide(slide_layout)
 

为幻灯片添加内容

添加内容之前先理解一下形状从技术上讲可以在幻灯片上放置 9 种类型的形状:

  • 形状 - 带有填充和轮廓的自动形状
  • 文本框 - 没有填充和轮廓的自动形状
  • 占位符 - 可以出现在幻灯片布局或母版上的自动形状并在使用该布局的幻灯片上继承允许添加采用占位符格式的内容
  • 线路/连接器
  • 图片
  • 表格 - 行和列的东西
  • 图表 – 饼图、折线图等
  • 智能艺术 - 尚不支持但如果存在则保留
  • 媒体剪辑——视频或音频

每一个幻灯片都有由一个形状树来组织之所以称为树是因为它在一般情况下是分层的;形状树中的节点可以是一个组形状它本身可以包含形状并具有与形状树相同的语义对于大多数用途形状树具有列表语义

获取幻灯片中的形状:

shapes = slide.shapes

自动形状是规则形状正方形、圆形、三角形、星星之类的有 182 种不同的形状可供选择其中 120 个具有调整“手柄”您可以使用它来改变形状

许多形状类型共享一组公共属性我们将在此处介绍其中的许多形状因为其中一些形状只是 AutoShape 的一种特殊形式

添加自动形状

以下代码添加一个圆角矩形形状一英寸见方并放置在距幻灯片左上角一英寸处:

from pptx.enum.shapes import MSO_SHAPE
from pptx.util import Inches
shapes = slide.shapes
left = top = width = height = Inches(1.0)
shape = shapes.add_shape(
    MSO_SHAPE.ROUNDED_RECTANGLE, left, top, width, height
)
prs.save('新建幻灯片.pptx')

有关所有 182 种自动形状类型的列表具体请参阅官方文档 MSO_AUTO_SHAPE_TYPE 枚举项

占位符

占位符也是一种形状有 18 种类型的占位符标题、中心标题、副标题、正文内容图片剪贴画图表、表格、智能艺术日期、页脚、幻灯片编号媒体剪辑标题垂直正文、垂直对象、垂直标题

幻灯片上的占位符可以为空或已填充这在图片占位符中最为明显未填充时占位符会显示可自定义的提示文本内容丰富的占位符在为空时也会显示一个或多个内容插入按钮

纯文本占位符在输入文本的第一个字符时进入“填充”模式并在删除文本的最后一个字符时返回“未填充”模式内容丰富的占位符在插入图片等内容时进入填充模式并在删除该内容时返回未填充模式为了删除填充的占位符形状必须被删除两次第一次删除删除内容并将占位符恢复到未填充模式额外的删除将删除占位符本身可以通过重新应用布局来恢复已删除的占位符

访问占位符

>>> prs = Presentation()
>>> slide = prs.slides.add_slide(prs.slide_layouts[8])
>>> for shape in slide.placeholders:
...     print('%d %s' % (shape.placeholder_format.idx, shape.name))
...
0  Title 1
1  Picture Placeholder 2
2  Text Placeholder 3

如果已经知道占位符的索引也可通过索引来访问:

>>> slide.placeholders[1]
<pptx.parts.slide.PicturePlaceholder object at 0x10d094590>
>>> slide.placeholders[2].name
'Text Placeholder 3'

将内容插入占位符

>>> prs = Presentation()
>>> slide = prs.slides.add_slide(prs.slide_layouts[8])
>>> placeholder = slide.placeholders[1]  # idx key, not position
>>> placeholder.name
'Picture Placeholder 2'
>>> placeholder.placeholder_format.type
PICTURE (18)
>>> picture = placeholder.insert_picture('my-image.png')

如果要插入表格:

from pptx import Presentation
from pptx.util import Inches
prs = Presentation()
title_only_slide_layout = prs.slide_layouts[5]
slide = prs.slides.add_slide(title_only_slide_layout)
shapes = slide.shapes
shapes.title.text = 'Adding a Table'
rows = cols = 2
left = top = Inches(2.0)
width = Inches(6.0)
height = Inches(0.8)
table = shapes.add_table(rows, cols, left, top, width, height).table
# set column widths
table.columns[0].width = Inches(2.0)
table.columns[1].width = Inches(4.0)
# write column headings
table.cell(0, 0).text = 'Foo'
table.cell(0, 1).text = 'Bar'
# write body cells
table.cell(1, 0).text = 'Baz'
table.cell(1, 1).text = 'Qux'
prs.save('write_ppt_table.pptx')

如果要插入图表:

from pptx import Presentation
from pptx.chart.data import CategoryChartData
from pptx.enum.chart import XL_CHART_TYPE
from pptx.util import Inches
# create presentation with 1 slide ------
prs = Presentation()
slide = prs.slides.add_slide(prs.slide_layouts[5])
# define chart data ---------------------
chart_data = CategoryChartData()
chart_data.categories = ['East', 'West', 'Midwest']
chart_data.add_series('Series 1', (19.2, 21.4, 16.7))
# add chart to slide --------------------
x, y, cx, cy = Inches(2), Inches(2), Inches(6), Inches(4.5)
slide.shapes.add_chart(
    XL_CHART_TYPE.COLUMN_CLUSTERED, x, y, cx, cy, chart_data
) 
prs.save('write_ppt_chart.pptx')

PPT 转 Pdf

以下方法仅适用于 windows

def PPTtoPDF2(inputFileName, outputFileName, formatType = 32):
    import comtypes.client
    powerpoint = comtypes.client.CreateObject("Powerpoint.Application")
    powerpoint.Visible = 1
    if outputFileName[-3:] != 'pdf':
        outputFileName = outputFileName + ".pdf"
    deck = powerpoint.Presentations.Open(inputFileName)
    deck.SaveAs(outputFileName, formatType) # formatType = 32 for ppt to pdf
    deck.Close()
    powerpoint.Quit()

最后的话

本文抛砖引玉更多复杂的 PPT 操作请移步至文末的官方文档

参考文档:

https://python-pptx.readthedocs.io/en/latest/user/quickstart.html


相关文章

猜您喜欢

  • Jquery之datagrid查询 Jquery之datagrid查询详解

    想了解Jquery之datagrid查询详解的相关内容吗小丸子✘在本文为您仔细讲解Jquery之datagrid查询的相关知识和一些Code实例欢迎阅读和指正我们先划重点:Jquerydatagrid,datagrid查询下面大家一起来学习吧..
  • C++矩阵对称正交化 C++实现矩阵对称正交化的代码实例

    想了解C++实现矩阵对称正交化的代码实例的相关内容吗岑小岑在本文为您仔细讲解C++矩阵对称正交化的相关知识和一些Code实例欢迎阅读和指正我们先划重点:C++矩阵对称正交化,C++矩阵对称下面大家一起来学习吧..

网友评论

Copyright 2020 www.sopisoft.net 【绿软下载站】 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 点此查看联系方式