吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 500|回复: 16
收起左侧

[Python 原创] PPT快速查重对比工具源码

[复制链接]
killerzeno 发表于 2024-11-15 15:30
本帖最后由 killerzeno 于 2024-11-15 15:33 编辑

PPT快速查重对比工具源码



工具用途:快速查询对比两个PPT之间内容是否有差异,并在备注内注明差异页数,快速找出重复页,方便后续合并。
开发语言:Python
原贴链接:PPT快速查重对比工具

源码如下:


[Python] 纯文本查看 复制代码
import os
import tkinter as tk
from tkinter import filedialog, messagebox
from pptx import Presentation
from pptx.enum.shapes import MSO_SHAPE_TYPE

def extract_text_from_slide(slide):
    """
    提取幻灯片中的所有文本。
    """
    texts = []
    for shape in slide.shapes:
        if shape.has_text_frame:
            for paragraph in shape.text_frame.paragraphs:
                for run in paragraph.runs:
                    texts.append(run.text)
        elif shape.shape_type == MSO_SHAPE_TYPE.PLACEHOLDER:
            if shape.has_text_frame:
                for paragraph in shape.text_frame.paragraphs:
                    for run in paragraph.runs:
                        texts.append(run.text)
    return ' '.join(texts)


def add_comment_to_slide(slide, comment):
    """
    在指定幻灯片的备注中添加注释。如果已有备注,则替换为新的注释。
    """
    if slide.has_notes_slide:
        notes_slide = slide.notes_slide
    else:
        # 为当前幻灯片添加备注幻灯片
        notes_slide = slide.notes_slide  # 这里不需要赋值,直接使用属性即可

    # 设置新的备注文本
    notes_slide.notes_text_frame.text = comment


def compare_ppt_files(current_ppt_path, directory):
    """
    比较当前打开的 PPT 文件与目录下的所有 PPT 文件的每一页。
    如果找到重复的页面,则在当前 PPT 的备注中添加“重复: 与第 X 页重复”。
    """
    current_prs = Presentation(current_ppt_path)
    current_slides = [extract_text_from_slide(slide) for slide in current_prs.slides]

    for filename in os.listdir(directory):
        if filename.endswith(".pptx") and filename != os.path.basename(current_ppt_path):
            other_prs_path = os.path.join(directory, filename)
            other_prs = Presentation(other_prs_path)
            other_slides = [extract_text_from_slide(slide) for slide in other_prs.slides]

            for i, current_slide_text in enumerate(current_slides):
                for j, other_slide_text in enumerate(other_slides):
                    if current_slide_text == other_slide_text:
                        print(f"找到重复页面: 当前PPT的第 {i + 1} 页 与 {filename} 的第 {j + 1} 页相同。")
                        add_comment_to_slide(current_prs.slides[i], f"重复: 与 {filename} 的第 {j + 1} 页重复")
                        break  # 假设每页只标记一次重复

    # 保存修改后的当前PPT,命名规则为“已做标记_原文件名”
    base_name = os.path.basename(current_ppt_path)
    output_path = os.path.join(directory, "已做标记_" + base_name)
    current_prs.save(output_path)
    print(f"修改后的PPT已保存为: {output_path}")


def select_ppt_file():
    """
    弹出文件选择对话框,让用户选择要比较的PPT文件。
    """
    root = tk.Tk()
    root.withdraw()  # 隐藏主窗口
    messagebox.showinfo("提示", "请选择待对比的PPT文件,并确保原始文件在同目录下。")
    file_path = filedialog.askopenfilename(
        title="选择待对比的PPT文件",
        filetypes=[("PowerPoint files", "*.pptx")]
    )
    return file_path


def select_save_directory():
    """
    弹出目录选择对话框,让用户选择保存修改后的PPT文件的目录。
    """
    root = tk.Tk()
    root.withdraw()  # 隐藏主窗口
    messagebox.showinfo("提示", "请选择保存修改后PPT文件的目录。")
    directory = filedialog.askdirectory(title="选择保存修改后PPT文件的目录")
    return directory


if __name__ == "__main__":
    # 弹出文件选择对话框,让用户选择要比较的PPT文件
    current_ppt_path = select_ppt_file()
    if not current_ppt_path:
        messagebox.showerror("错误", "未选择要比较的PPT文件。")
        exit()

    # 弹出目录选择对话框,让用户选择保存修改后PPT文件的目录
    directory = select_save_directory()
    if not directory:
        messagebox.showerror("错误", "未选择保存修改后PPT文件的目录。")
        exit()

    # 检查文件是否存在
    if not os.path.exists(current_ppt_path):
        messagebox.showerror("错误", f"文件不存在: {current_ppt_path}")
        exit()

    # 比较PPT文件
    compare_ppt_files(current_ppt_path, directory)

免费评分

参与人数 1吾爱币 +7 热心值 +1 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

zixiangcode 发表于 2024-11-15 18:54
那能否据此写一个提取 PPT 信息然后扔到 git 里面去 diff 的工具,自动从 PPT 转换成元信息 diff 后再转换回去,并处理 diff 的信息🤔
不过这似乎直接用 WPS 的在线文档就好🤓
总之谢谢楼主分享
isolato 发表于 2024-11-15 16:26
evahappy 发表于 2024-11-15 16:29
这个正好需要,叫兄弟改的 ,后面自己都不知道改哪里了。这样就好办了
china-ray 发表于 2024-11-15 16:46
这个不错,日常办公应该会用到,感谢分享!
宁致远 发表于 2024-11-15 16:55
做PPT的时候可以用到,能提高效率就是好的!!!
热门软件 发表于 2024-11-15 17:12
evahappy 发表于 2024-11-15 16:29
这个正好需要,叫兄弟改的 ,后面自己都不知道改哪里了。这样就好办了

原来是这个作用啊
echoofw 发表于 2024-11-15 17:26
感谢大佬分享
清淡如风 发表于 2024-11-15 17:48
学习了,这样的代码多多益善!
Su117978228 发表于 2024-11-15 18:31
学习了,感谢大佬
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 09:42

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表