各位大佬!Python通过pywin32(com接口)调用PPT 复制粘贴幻灯片问题!

最近弄了一个项目遇到了下面一个问题。

先上代码(项目里面写的代码,闲看着麻烦直接跳转到后面的-问题还原)

# dq_ppt_start_silde_index、dq_ppt_end_silde_index 这两个都是数字,代表页码
for dq_data_ppt_silde_index, dq_ppt_silde_index in enumerate(range(dq_ppt_start_silde_index, dq_ppt_end_silde_index)):
    dq_data_ppt_silde_index += 1
    while True:
        try:
            dq_data_ppt_slides(dq_data_ppt_silde_index).Copy()
            dq_ppt_sildes.Paste(dq_ppt_silde_index)
            sleep(1)
            break
        except Exception:
            # E_err_jg 代表错误等待时间
            print(f'第{dq_ppt_silde_index}页复制出现问题!{E_err_jg}秒后重试。')
            sleep(E_err_jg)

代码解释如下:

该代码使用的ppt对象为:
pywin32导入的ppt对象即

from win32com.client import Dispatch
P_app = Dispatch('Powerpoint.Application')
# dq_ppt_ph、ppt_ph: 两个不同的 PPT文件的绝对路径
dq_data_ppt = P_app.Presentations.Open(dq_ppt_ph)
dq_ppt_obj = P_app.Presentations.Open(ppt_ph)
dq_data_ppt_slides = dq_data_ppt.Slides
dq_ppt_sildes = dq_ppt_obj.Slides

问题详情

在上述代码运行的时候,所使用的 P_app 会在成功复制粘贴 N个后直接崩溃。
到底要怎样才可以复制粘贴幻灯片成功呀

问题展示☟

问题还原

所需代码

# 使用本代码前请先打开两个ppt文件,本程序功能是把第一个PPT的所有幻灯片复制到第二个PPT里面
from win32com.client import Dispatch
P = Dispatch('Powerpoint.Application')
DS = P.Presentations
print(f'当前pptapp共有 {DS.Count} 个打开的PPT文件')
D1 = DS(1)
D2 = DS(2)
print(D1.Name, '|', D2.Name)
D1_sildes, D2_sildes = D1.Slides, D2.Slides
D1_sildes_count, D2_sildes_count = D1_sildes.Count, D2_sildes.Count
for dq_paste_index, dq_copy_index in zip(range(D2_sildes_count + 1, D2_sildes_count + D1_sildes_count + 1),
                                         range(1, D1_sildes_count + 1)):
    D1_sildes(dq_copy_index).Copy()
    D2_sildes.Paste(dq_paste_index)
    print(f'第 {dq_copy_index} 页 ppt 已复制粘贴成功!')
阅读 4.4k
1 个回答

顶一下,在线等

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏