【问题标题】:Powerpoint 2011 VBA Image ReplacementPowerpoint 2011 VBA 图像替换
【发布时间】:2011-09-04 05:22:58
【问题描述】:
所以我有一个 Powerpoint 演示文稿。它包含许多图像,由图像 X 引用。(所以它是同一个图像,但在多个页面上)不同页面/幻灯片上的这些相同图像具有与之关联的不同宽度/高度属性。因此,即使它们是相同的图像,它们的大小也可能不同。
因此存在这样一种情况,即图像存在于许多幻灯片上。我希望能够同时(快速)替换所有这些,而不必浏览每张幻灯片并分别用新图像一次替换 X。
- 这可能吗? (是/否)
- 这将如何实现? (摘要 - 只需要高级解释)
【问题讨论】:
标签:
vb.net
vba
powerpoint
【解决方案1】:
在 Open XML 中是可能的 - 只要您知道自己在寻找什么。每张幻灯片(以及每张幻灯片版式)都是一个 XML 文件。这些 XML 文件采用 Open Packaging Convention 格式,维护一个扩展名为 .rels 的关系文件。所以如果你的第一张幻灯片是slide1.xml,那么它的关系文件就是slide1.xml.rels。这是为每张幻灯片保存图像参考的位置。
.rels 文件如下所示:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship
Id="rId3"
Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout"
Target="../slideLayouts/slideLayout3.xml"/>
<Relationship
Id="rId7"
Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"
Target="../media/image3.png"/>
<Relationship
Id="rId6"
Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"
Target="../media/image2.wmf"/>
<Relationship
Id="rId4" T
ype="http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesSlide"
Target="../notesSlides/notesSlide1.xml"/>
</Relationships>
您会注意到项目 2 和 3 通过 Type 引用图像。
当您在 PowerPoint 中插入图像时,原来的名称不再重要,PowerPoint 会重命名它。因此,如果是 My_Climb_Up_Denali.jpg,它将被重命名为 image1.jpg。
所以这里的问题是知道您要查找的图像。在 <p:pic> 元素中,有一个属性 ...@name 通常保留它感兴趣的文件路径(但有时会有所不同,例如从剪贴画插入时)。无论如何,这只是记住您正在寻找的内容的一种半可靠的方式。
所以你可能需要查看包的内部内容才能找到图片的重命名。
Office Open XML Formats: Replacing PowerPoint 2007 Slide Images 上有关于此主题的操作方法,可能会有所帮助。
【解决方案2】:
它可能是可能的。当您在单个演示文稿中插入图像然后将其从一张幻灯片复制到另一张幻灯片时,PPT 仅保留一个原始图像。其他实例是指向第一个图像的内部指针。在某些情况下,它还会检测到用户多次插入同一张图片,在这种情况下,它会做同样的事情;创建指向原始图像的指针,而不是插入图像的新实例。
我玩这个已经有一段时间了,但在某一时刻,我能够追踪它在 XML 中跟踪复制的图像从一张幻灯片到另一张幻灯片,回到原始图像的方式。
因此,如果图像被正常插入(而不是复制/粘贴或作为对象插入),然后从原始插入图像复制粘贴到其他幻灯片,您可以通过替换原始图像来做您想做的事情XML。
一旦创建文件,我想不出任何其他方式会发生这种情况。
如果您可以控制图像在未来演示文稿中的插入方式,则可以进行设置,以便您可以相当简单地执行此操作。