前段时间捣鼓了一下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

image-20240522091006265.webp

设置文本居中对齐

p.alignment = alignment
# alignment: 文本水平居中对齐:1为左对齐,2为居中,3为右对齐

修改文件备注

PPT文件本身的备注和属性信息需要修改的话,可以使用下面的方法:

image-20240522093538486.webp

# 创建一个新的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

image-20240522093653876.webp

文章目录