Python,如何在Powerpoint模板中插入值?

Python,如何在Powerpoint模板中插入值?,python,powerpoint,Python,Powerpoint,我想使用现有的powerpoint演示文稿生成一系列报告: 在我的想象中,powerpoint幻灯片将包含以下或类似形式的内容: Date of report: {{report_date}} Number of Sales: {{no_sales}} ... 然后我的python应用程序打开powerpoint,填写此报告的值,并使用新名称保存报告。 我在谷歌上搜索过,但找不到解决办法 有python pptx,但这都是关于创建一个新的表示,而不是在模板中插入值 有人能给我一些建议吗?我在

我想使用现有的powerpoint演示文稿生成一系列报告:

在我的想象中,powerpoint幻灯片将包含以下或类似形式的内容:

Date of report: {{report_date}} 
Number of Sales: {{no_sales}}
...
然后我的python应用程序打开powerpoint,填写此报告的值,并使用新名称保存报告。 我在谷歌上搜索过,但找不到解决办法

有python pptx,但这都是关于创建一个新的表示,而不是在模板中插入值

有人能给我一些建议吗?

我在挂着的一个“.ppx”文件上试过这个方法。
microsoft office power point“.pptx”文件采用“.zip”格式。
当我解压缩文件时,我得到了一个“.xml”文件和三个目录。
我的“.pptx”文件有116张幻灯片,其中包括3477个文件和22个目录/子目录。
通常情况下,我会说这是不可行的,但由于您只有两个简短的更改,因此您可能会找出要更改的内容并压缩文件以生成新的“.ppx”文件。

警告:在一个或多个“.xml”文件中存在一些二进制数据的xml blob。

使用python pptx,您完全可以随心所欲,只是可能不像您想象的那样直截了当

您可以阅读演示文稿中的对象,包括幻灯片和幻灯片上的形状。因此,如果您想在第二张幻灯片上更改第二个形状的文本,可以这样做:

slide = prs.slides[1]
shape = slide.shapes[1]
shape.text = 'foobar'
唯一真正的问题是你如何找到你感兴趣的形状。如果可以对演示文稿(模板)进行非可视更改,则可以确定形状id或形状名称并使用它。或者,您可以获取每个形状的文本,并使用正则表达式查找关键字/替换位


这并非没有挑战,python pptx也没有专门为这个角色设计的功能,但根据您问题的参数,这绝对是可行的。

最终,除了其他一些具有附加功能的库,您需要某种蛮力方法来迭代幻灯片集合和每张幻灯片各自的形状集合,以便识别匹配的形状(除非有其他库在PPT中具有额外的“查找”功能)。以下是仅使用
win32com
的暴力:

from win32com import client

find_date = r'{{report_date}}'
find_sales = r'{{no_sales}}'
report_date = '01/01/2016' # Modify as needed
no_sales = '604'           # Modify as needed

path = 'c:/path/to/file.pptx'
outpath = 'c:/path/to/output.pptx'
ppt = client.Dispatch("PowerPoint.Application")
pres = ppt.Presentations.Open(path, WithWindow=False)
for sld in pres.Slides:
    for shp in sld.Shapes:
        with shp.TextFrame.TextRange as tr:
            if find_date in tr.Text
                tr.Replace(find_date, report_date)
            elif find_sales in shp.TextFrame.Characters.Text
                tr.Replace(find_sales, no_sales)
pres.SaveAs(outpath)
pres.Close()
ppt.Quit()
如果这些字符串位于具有混合文本格式的其他字符串中,则保留现有格式会变得更加困难,但仍有可能


如果模板文件仍在设计中并受您的控制,则我会考虑给该形状提供一个唯一的标识符,如<代码> CuxXMultPux/Cube >,或者您可以为形状“<代码> AddiaTeXEXT/<代码>属性”指定一些东西。后者更容易使用,因为它不需要格式良好的XML,还因为它可以通过本机UI查看和操作,而

CustomXMLPart
只能通过编程方式访问,甚至有点违反直觉。您仍然需要逐个形状进行迭代,但只需检查相关属性值即可避免字符串比较。

您可以使用标准I/O写入.tex文件。您是使用powerpoint还是使用beamer演示文稿?“python pptx允许您创建新的演示文稿以及对现有演示文稿进行更改“-这不是你要找的吗?对现有内容进行更改?我读过,但文档只描述了如何创建内容,而不是如何查找元素和更改文本。我也找不到一个使用谷歌的例子。@user2241910:我已经收到了pptx中的报告模板,它是经过仔细设计的,我不想转移到其他格式你好!这是一个非常简洁的基本用法示例。您能告诉我您在哪里找到PPT命令的支持材料(帮助、指南、教程等)吗?在哪里解释了代码及其用法,如
PowerPoint.Presentations.Open()
,或
Slide.Shapes.AddTextbox()
?也许在这里:?^^^^^^事实上,这是对我问题的正确答案。