python-pptx的折腾记录
前段时间捣鼓了一下python-pptx,使用python来操作PPT,因为新版本的pptx使用Open XML格式,所以也可以用各种编程语言解析了,但是比如动画,控件等东西是无法解析和设置的,如果只是用来做一些常用的简单文档操作还是足够了的。具体可以看开源项目:scanny/python-pptx: Create Open XML PowerPoint documents in Python (github.com)。下文记录了几个常见的操作:
修改表格的样式
在ppt中插入表格,并且需要修改默认的表格样式,可使用下面设置XML的做法:
feature: apply table styles · Issue #27 · scanny/python-pptx (github.com)
参考yash-chandna的代码:
def set_table_style(table, new_style_id):
"""
Set the style of a PowerPoint table by directly manipulating the XML.
:param table: The table to modify.
:param style_id: The desired style ID.
"""
# Access the XML of the table
tbl = table._tbl
# Create an XML representation of a tblPr element with the new style ID
tblPr_xml = """<a:tblPr xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"
xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main"
xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"
firstRow="1" bandRow="1">
<a:tableStyleId>{NEW_STYLE_ID}</a:tableStyleId>
</a:tblPr>""".replace("{NEW_STYLE_ID}", new_style_id)
new_tblPr = parse_xml(tblPr_xml)
# Find the existing tblPr element and remove it
existing_tblPr = tbl.xpath('./a:tblPr')
if existing_tblPr:
tbl.remove(existing_tblPr[0])
# Add the new tblPr element to the table XML
tbl.insert(0, new_tblPr)
更多样式参考以前VB的手册中2010和2013版本的:
Programmatically Working with Table Styles in PowerPoint 2010 | Microsoft Learn?redirectedfrom=MSDN)
Generated 2013's myself (1 at a time with a macro... fun):
No Style, No Grid: {2D5ABB26-0587-4C30-8999-92F81FD0307C}
Themed Style 1 - Accent 1: {3C2FFA5D-87B4-456A-9821-1D502468CF0F}
Themed Style 1 - Accent 2: {284E427A-3D55-4303-BF80-6455036E1DE7}
Themed Style 1 - Accent 3: {69C7853C-536D-4A76-A0AE-DD22124D55A5}
Themed Style 1 - Accent 4: {775DCB02-9BB8-47FD-8907-85C794F793BA}
Themed Style 1 - Accent 5: {35758FB7-9AC5-4552-8A53-C91805E547FA}
Themed Style 1 - Accent 6: {08FB837D-C827-4EFA-A057-4D05807E0F7C}
No Style, Table Grid: {5940675A-B579-460E-94D1-54222C63F5DA}
设置方法为:
# 设置表格样式为无样式、网格型
# table.tableStyleId = '{6E25E649-3F16-4E02-A733-19D2CDBF48F0}'
set_table_style(table, '{6E25E649-3F16-4E02-A733-19D2CDBF48F0}')
文本自动换行
文本框需要自动换行使用下面的配置word_wrap
:
text_box = slide.shapes.add_textbox(Cm(left), Cm(top), Cm(width), Cm(height))
text_frame = text_box.text_frame
text_frame.word_wrap = True
设置文本垂直居中
垂直居中使用MSO_VERTICAL_ANCHOR.MIDDLE
:
#使用vertical_anchor可配置。
text_frame.vertical_anchor = MSO_VERTICAL_ANCHOR.MIDDLE
更多参数参考:MSO_VERTICAL_ANCHOR — python-pptx 0.6.22 documentation
设置文本居中对齐
p.alignment = alignment
# alignment: 文本水平居中对齐:1为左对齐,2为居中,3为右对齐
修改文件备注
PPT文件本身的备注和属性信息需要修改的话,可以使用下面的方法:
# 创建一个新的PPT文件
prs = Presentation()
# 获取PPT文件的核心属性
core_props = prs.core_properties
# 修改备注内容
new_comments = "这是新的文件备注内容"
core_props.comments = new_comments
修改幻灯片的尺寸
python-pptx默认输出的幻灯片尺寸是4:3的尺寸,如果我们需要宽屏,16:9的尺寸,则还需要额外的手动设置。
# 创建一个新的PPT文件
prs = Presentation()
# 设置幻灯片尺寸为16:9宽屏
prs.slide_width = Cm(33.867)
prs.slide_height = Cm(19.05)
使用Cm
可使用from pptx.util import Cm
对尺寸进行设置,如果使用英寸的话,可使用from pptx.util import Inches, Cm
。
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。