【问题标题】:Is it possible to check if a slide in one PowerPoint presentation is the same as a slide in another deck?是否可以检查一个 PowerPoint 演示文稿中的幻灯片是否与另一个幻灯片中的幻灯片相同?
【发布时间】:2016-08-30 11:59:24
【问题描述】:

我需要能够确定两个演示文稿中的(某些)幻灯片是否相同。基本上每个月都会更新一次主演示文稿,并将以前的版本存档。幻灯片顺序保持不变,只是这些幻灯片的内容可能发生了变化。问题是……

deck1.Slides(i)=deck2.Slides(i)

...不起作用,并且...

deck1.Slides(i).SlideID=deck2.Slides(i).SlideID

...即使幻灯片内容已更改,也会返回相同的值。

我想知道是否可以对幻灯片进行校验和,但我还没有在网上找到任何可以做到这一点的东西——我在这里遇到的 VBA 校验和例程仅适用于文本字符串。是否可以对幻灯片或对象进行校验和,还是我遗漏了一些明显的东西?

【问题讨论】:

  • 我可能弄错了,但是根据我对 PowerPoint 自动化的一点经验,我希望您必须循环遍历要比较的幻灯片的内容(我猜是 .形状集合将是相关的)
  • 定义“相同”。如果 a) 文本相同,但文本颜色已更改,b) 文本框已移动,c) 已添加或调整图像大小……等等,它们是否相同?您将不得不编写代码来一一检查所有参数。 PowerPoint 不是为此设计的。它是一个演示工具,而不是一个报告程序。如果你用它来报道,那笑话就在你身上......
  • 欢迎来到使用 PowerPoint 进行此类事情的金融服务行业!相同,我的意思是完全一样,所以文本颜色的变化,形状的移动都会被这个捕捉到——如果可能的话……
  • 不是解决方案,但 PowerPoint 支持 Merge 和 MergeWithBaseline,可以在比较两个套牌时使用。然后,这将使用 Review 窗格中的演示文稿之间的更改填充 UI。
  • 另一种可能的方法:将两张幻灯片导出为 PNG 文件并比较 PNG 上的校验和。

标签: vba powerpoint checksum


【解决方案1】:

虽然这绝不是一个准备好部署的解决方案,但这可能会提供一个起点,前提是您的具体任务是检查看似相同的演示文稿中更改的文本内容。

我将此范围缩小到比较幻灯片 1 上的文本框(形状类型 14)的文本内容以进行演示。

Sub Neu()
    Dim ppt As New PowerPoint.Application

    Dim i As Integer, j As Integer        
    i = 1
    For j = 1 To ppt.Presentations(1).Slides(i).Shapes.Count

        If ppt.Presentations(1).Slides(i).Shapes(j).Type = 14 And _
            Presentations(2).Slides(i).Shapes(j).Type = 14 Then _            
                Debug.Print _
                    ppt.Presentations(1).Slides(i).Shapes(j).TextFrame.TextRange.Text = _
                    Presentations(2).Slides(i).Shapes(j).TextFrame.TextRange.Text

    Next j
End Sub

一般说明:

  • 这显然不考虑更改格式或排名。
  • 一旦有新形状添加到其中一张幻灯片中,我预计会遇到一些麻烦。
  • Afaik,当添加一个新形状时,它应该有Shape(Index) = Shapes.Count+1,但你永远不知道人们对你做了什么 演示文稿...

希望有人想出一个更优雅的方法来解决这个问题!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-29
    • 1970-01-01
    • 2014-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    相关资源
    最近更新 更多