Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python pptx自动重新排列powerpoint幻灯片_Python_Powerpoint_Python Pptx - Fatal编程技术网

使用python pptx自动重新排列powerpoint幻灯片

使用python pptx自动重新排列powerpoint幻灯片,python,powerpoint,python-pptx,Python,Powerpoint,Python Pptx,我们通常使用powerpoint来促进我们的实验。我们在powerpoint中使用“部分”来为每个实验任务将幻灯片组放在一起。移动部分以平衡实验的任务顺序已经做了很多工作 我认为我们可能能够在CSV中预定义一个平衡顺序(使用一个表示部分顺序的数字字符串),该顺序可以从python中读取。然后使用python pptx移动各部分并保存每个订单的文件。我遇到的问题是理解如何阅读python pptx中的部分。如果有人有比python更好的解决方案,请告诉我 谢谢你的帮助 如前所述(): 现在,添加幻

我们通常使用powerpoint来促进我们的实验。我们在powerpoint中使用“部分”来为每个实验任务将幻灯片组放在一起。移动部分以平衡实验的任务顺序已经做了很多工作

我认为我们可能能够在CSV中预定义一个平衡顺序(使用一个表示部分顺序的数字字符串),该顺序可以从python中读取。然后使用python pptx移动各部分并保存每个订单的文件。我遇到的问题是理解如何阅读python pptx中的部分。如果有人有比python更好的解决方案,请告诉我

谢谢你的帮助

如前所述():

现在,添加幻灯片是幻灯片集合上的唯一操作。在撰写本文时,待办事项列表中的一个选项是删除幻灯片并将幻灯片移动到列表中的其他位置。在一般情况下,将幻灯片从一个演示文稿复制到另一个演示文稿是非常困难的,因此,在更多的积压工作被烧掉之前,这可能不会发生

或者换句话说,目前不可能按照您的建议移动幻灯片。我使用过的最好的解决方法是生成一个新的演示文稿,并将幻灯片重新排序到该演示文稿中(因为您可以添加幻灯片)

例如,假设我在Presentation1.pptx中有以下幻灯片:

[0]
[1]
[2]
[3]
[4]
但我想:

[2]
[3]
[4]
[0]
[1]
您的代码(在未测试的伪代码中)将是:

old_presentation = Presentation("Presentation1.pptx")
new_presentation = Presentation()

for slide in old_presentation.slides[2:]:
    new_slide = new_presentation.slides.add_slide() # transfer the contents into new presentation for slides [2] [3] [4]
    populate_new_slide_from_old_slide(slide, new_slide)

for slide in old_presentation.slides[:2]:
    new_slide = new_presentation.slides.add_slide() # transfer the contents into new presentation for slides [0] [1]
    populate_new_slide_from_old_slide(slide, new_slide)

new_presentation.save()
其中,
从旧幻灯片()填充新幻灯片()
如下所示(非常确定这将按原样工作,但我没有测试它):

我相信占位符也是形状,所以它们应该通过这种方法传递


请注意,我有一段时间没有编写
.pptx
,因此实际实现可能略有不同。作为一个概念,这是目前唯一能满足你要求的方法。在我看来,如果您正在积极地生成数据(而不是事后重新组织数据),那么只需创建一个
新的演示文稿
对象并将数据插入其中可能会更简单。对我来说,继续以旧格式生成输出,然后将其转换为新格式似乎很奇怪。例如,当DVD问世时,人们开始将他们的电影放在上面(明智的选择),而不是制作VHS,然后通过某种任意的方法将VHS移植到DVD上(我试图劝阻你不要这样做)如果我们所做的只是重新排序,那么读取XML并用排列好的幻灯片元素重写它是否可行

此外,对于“delete”情况,简单地删除XML中的幻灯片元素是否可行?(我意识到这可能会在文件中留下悬空的对象,如图像。)


提取XML并将其重写为文件副本的过程可能并不繁重。

python-pptx
没有用于重新排列/重新设计幻灯片的良好功能。我建议你编写一些脚本,为每个实验生成一个新的powerpoint。谢谢你的回复!你能详细说明一下吗?我确信这很难做到。请注意,幻灯片不能仅通过在
中引用它们就从一个演示文稿“复制”到另一个演示文稿。add_slide()
方法。另外,
Presentation
对象没有
.add\u slide()
方法,该方法位于
Slides
集合中,类似于
prs.Slides.add\u slide()
。基本上,我认为Reedinanger建议的是类似于旧幻灯片中幻灯片的
:新幻灯片(空)\u幻灯片=新幻灯片。幻灯片。添加幻灯片();从旧幻灯片填充新幻灯片(旧幻灯片,新幻灯片)
,这也是我的建议。@scanny感谢您的评论。是的,我指的是
prs.slides.add_slide()
方法,并且编辑了我的文章。我还详细阐述了从旧幻灯片()填充新幻灯片的过程。
def populate_new_slide_from_old_slide(slide, new_slide):
    shapes_to_transfer = slide.shapes
    for shape in shapes_to_transfer:
        new_shape = new_slide.shapes.add_shape(shape)