Python办公自动化PPT批量转换操作
目录
- python-pptx 模块的安装
- 读取 PPT
- 写入 PPT
- 添加一张幻灯片
- 为幻灯片添加内容
- 获取幻灯片中的形状:
- 添加自动形状
- 占位符
- 访问占位符
- 将内容插入占位符
- 如果要插入表格:
- 如果要插入图表:
- PPT 转 Pdf
- 最后的话
PPT 分为内容和格式,用 Python 操作 PPT,就是利用 Python 对 PPT 的内容进行获取和填充,修改 PPT 的格式并不是 Python 的强项。因此,当你有一堆 PPT 要做的时候,先做好一个带格式的 PPT,然后用 Python 复制这个 PPT 文件,然后再对其进行读写。
python-pptx 模块的安装
pip install python-pptx
读取 PPT 假如文件「测试.pptx」的内容如下:
文章图片
那么以下代码可以读取其内容:
from pptx import Presentationprs = 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)
执行结果如下所示:
文章图片
【Python办公自动化PPT批量转换操作】
写入 PPT 先来个简单点的。
假如要生成如下图所示的 PPT 页
文章图片
代码可以这样写:
from pptx import Presentationprs = Presentation()title_slide_layout = prs.slide_layouts[0]slide = prs.slides.add_slide(title_slide_layout)title = slide.shapes.titlesubtitle = 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
文章图片
比如现在要添加一张标题和内容的版式,就可以这样写代码:
from pptx import Presentationprs = 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_SHAPEfrom pptx.util import Inchesshapes = slide.shapesleft = 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))...0Title 11Picture Placeholder 22Text Placeholder 3
如果已经知道占位符的索引,也可通过索引来访问:
>>> slide.placeholders[1]>>> 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.typePICTURE (18)>>> picture = placeholder.insert_picture('my-image.png')
如果要插入表格:
from pptx import Presentationfrom pptx.util import Inchesprs = Presentation()title_only_slide_layout = prs.slide_layouts[5]slide = prs.slides.add_slide(title_only_slide_layout)shapes = slide.shapesshapes.title.text = 'Adding a Table'rows = cols = 2left = 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 widthstable.columns[0].width = Inches(2.0)table.columns[1].width = Inches(4.0)# write column headingstable.cell(0, 0).text = 'Foo'table.cell(0, 1).text = 'Bar'# write body cellstable.cell(1, 0).text = 'Baz'table.cell(1, 1).text = 'Qux'prs.save('write_ppt_table.pptx')
如果要插入图表:
from pptx import Presentationfrom pptx.chart.data import CategoryChartDatafrom pptx.enum.chart import XL_CHART_TYPEfrom 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 = https://www.it610.com/article/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.clientpowerpoint = comtypes.client.CreateObject("Powerpoint.Application")powerpoint.Visible = 1if outputFileName[-3:] != 'pdf':outputFileName = outputFileName + ".pdf"deck = powerpoint.Presentations.Open(inputFileName)deck.SaveAs(outputFileName, formatType) # formatType = 32 for ppt to pdfdeck.Close()powerpoint.Quit()
最后的话 本文抛砖引玉,更多复杂的 PPT 操作,请移步至文末的官方文档。
参考文档:
https://python-pptx.readthedocs.io/en/latest/user/quickstart.html
以上就是Python办公自动化PPT批量转换操作的详细内容,更多关于Python办公自动化的资料请关注脚本之家其它相关文章!
推荐阅读
- python学习之|python学习之 实现QQ自动发送消息
- 逻辑回归的理解与python示例
- python自定义封装带颜色的logging模块
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- Python基础|Python基础 - 练习1
- Python爬虫|Python爬虫 --- 1.4 正则表达式(re库)
- Python(pathlib模块)
- python青少年编程比赛_第十一届蓝桥杯大赛青少年创意编程组比赛细则
- Python数据分析(一)(Matplotlib使用)
- Python|Python 9.20