Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.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在多个打开的powerpoint演示文稿之间切换?_Python_Python 3.x - Fatal编程技术网

如何使用python在多个打开的powerpoint演示文稿之间切换?

如何使用python在多个打开的powerpoint演示文稿之间切换?,python,python-3.x,Python,Python 3.x,从其他类似的帖子来看,这可能不像我希望的那么简单,但我还是不得不问 在下面的代码段中,使用win32com.client和Application.Presentations.Open(ppt1,ReadOnly=0)将打开并激活powerpoint演示文稿。使用Application.Presentations.Open(ppt2,ReadOnly=0)将打开并激活另一个powerpoint演示文稿。正如您将看到的,我可以很容易地引用前面的演示并使用它做一些事情,但它不会成为活动窗口。如何做到这

从其他类似的帖子来看,这可能不像我希望的那么简单,但我还是不得不问

在下面的代码段中,使用
win32com.client
Application.Presentations.Open(ppt1,ReadOnly=0)
将打开并激活powerpoint演示文稿。使用
Application.Presentations.Open(ppt2,ReadOnly=0)
将打开并激活另一个powerpoint演示文稿。正如您将看到的,我可以很容易地引用前面的演示并使用它做一些事情,但它不会成为活动窗口。如何做到这一点

以下是我一直从事的工作:

# The following requires two existing presentations
# ppt1.pptx and ppt2.pptx in a directory named C:\\pptTest\\

import win32com.client

Application = win32com.client.Dispatch("PowerPoint.Application")  
directory = 'C:\\pptTest\\'
ppt_a = 'ppt_a.pptx'
ppt_b = 'ppt_b.pptx'
presentation_a = directory + ppt_a
presentation_b = directory + ppt_b

pres_a = Application.Presentations.Open(presentation_a, ReadOnly=0)
pres_b = Application.Presentations.Open(presentation_b, ReadOnly=0)


pres_a_slide1 = pres_a.Slides.Add(len(pres_a.Slides)+1, 12)
shape_a_1 = pres_a_slide1.Shapes.AddTextbox(Orientation=0x1,Left=100,Top=50,Width=400,Height=100)
shape_a_1.TextFrame.TextRange.Text='PRESENTATION A'
##%%
pres_b_slide1 = pres_b.Slides.Add(len(pres_b.Slides)+1, 12)
shape1 = pres_b_slide1.Shapes.AddTextbox(Orientation=0x1,Left=100,Top=50,Width=400,Height=100)
shape1.TextFrame.TextRange.Text='PRESENTATION B'
结果:

正如您在示例中看到的,在打开另一个演示文稿后,我仍然可以引用第一个演示文稿,但我无法将其设置为活动窗口。我之所以对此感兴趣,是因为有些方法无法正常工作,除非我通过Python编辑的演示文稿也是活动窗口。如果有人对此感兴趣,我也会深入了解这些细节


谢谢你的建议

我翻遍了一些旧代码,发现了一些我还必须在不同的开放程序之间切换的东西:

from win32com.client import Dispatch
autoit = Dispatch("AutoItX3.Control")

def _window_movement_windows(page_title):
        autoit.WinSetOnTop(page_title, "", 1)
        autoit.WinActivate(page_title, "")
        autoit.WinWaitActive(page_title)

可以在这里找到一个如何使用python设置AutoIt的示例:

几个示例,看看是否适合您

import win32com.client as win32

file1='C:/test.pptm'
file2='C:/test2.pptm'

PowerPoint=win32.DispatchEx("PowerPoint.Application")
PowerPoint.Visible = True
Presentation1 = PowerPoint.Presentations.Open(file1)
Presentation2 = PowerPoint.Presentations.Open(file2)

PowerPoint.Windows(1).Activate()
PowerPoint.Windows(2).Activate()

print(PowerPoint.ActivePresentation.Name) # to see the name
PowerPoint.Presentations("test.pptm").Windows(1).Activate()
PowerPoint.Presentations("test2.pptm").Windows(1).Activate()

Presentation1.Windows(1).Activate()
Presentation2.Windows(1).Activate()

我过去曾使用autoIt在应用程序之间切换焦点。也许这对你的问题有帮助。谢谢你的回答!pip安装-你先安装吗?或者其他方法?我已经很久没有设置它了,但我很快在谷歌上搜索了它,这里有一个设置它的方法: