一、需求
今天想要批量合并PPT文件,但是网上找到的代码都不能让我满意。ChatGPT写的代码也可能过时还是怎么了,总会使用一些报错的方法,搞得我有点秃头。
二、环境需求
一台Computer
Python环境
Microsoft Office PowerPoint
使用控制台下载需要的库
pip install pywin32
三、编写代码
"""
Author: LeopardRich 2829176648@qq.com
Date: 2023-12-31 18:22:02
Description: Function functionality@实现PPT批量合并功能
Copyright (c) 2023 by LeopardRich 2829176648@qq.com, All Rights Reserved.
"""
import os
import time
import win32com.client
def merge_ppt_files(folder_path: str, output_file: str) -> None:
"""批量合并folder_path文件加中PPT文件并存至output_file
Args:
folder_path (str): PPT文件夹所在的位置
output_file (str): 输出PPT文件的路径
Returns:
None
"""
# 相关配置
PowerPoint = win32com.client.Dispatch("PowerPoint.Application")
PowerPoint.Visible = True
PowerPoint.DisplayAlerts = 0
# 获取文件夹下所有pptx或ppt文件
PPTs = []
for file in os.listdir(folder_path):
if os.path.isfile(os.path.join(folder_path, file)) and \
(file.endswith('.ppt') or file.endswith('.pptx')) and not file.startswith("~$"):
PPTs.append(os.path.abspath(os.path.join(folder_path, file)))
# 排个序
PPTs.sort()
# 给你一个提示
print(f"将要合并的顺序是", PPTs)
# 新文件没有Slides属性好像,所以直接使用第一个PPT文件开头
header_PPT = PowerPoint.Presentations.Open(PPTs.pop(0))
for next_PPT_file in PPTs:
try:
next_PPT = PowerPoint.Presentations.Open(next_PPT_file)
# 遍历PPT页面(PPT页面索引好像是从 1 开始的)
for index in range(1, len(next_PPT.Slides) + 1):
print(f"当前正在复制{next_PPT_file}:Page{index}")
next_PPT.Slides(index).Copy()
header_PPT.Slides.Paste()
# 休眠一会,不然复制粘贴太快,剪切板会出现报错
time.sleep(0.25)
# 关闭后续文件
next_PPT.Close()
except Exception as e:
print(f"无法处理文件 {next_PPT_file}: {e}")
exit()
header_PPT.SaveAs(output_file)
header_PPT.Close()
PowerPoint.Quit()
if __name__ == '__main__':
# 替换成你的文件夹路径
folder_path = r'D:\Desktop'
# 替换成你想要的输出文件路径
output_file = r'D:\Desktop\merged.pptx'
merge_ppt_files(folder_path, output_file)
四、总结
ChatGPT在学习过程中确实帮助很大,但是它也经常犯一些我不太好判断的错误。还是多方参考,然后自己学习,可能比较适合我进步吧!