如何在整个PowerPoint文件中获得相同的形状或图片并替换它们?

问题描述

我正在使用 Visual Studio 并开发一个 Office加载项。我需要确定相同的形状和图片并替换它们。

我尝试使用 OpenXml 来做到这一点,但似乎无法在使用的文件中对其进行修改。它似乎不能用作Office加载项,因为它不适用于已经打开的文件

我在互联网上搜索了许多小时,但没有找到一种方法。 请帮助我。

谢谢

解决方法

TL; DR: OpenXML Office加载项(包括 VSTO )是针对不同用例的竞争技术,可能会导致运行时问题如果结合。最好只坚持一个。


我正在...开发Office加载项。我需要确定相同的形状和图片并替换它们。我尝试使用OpenXml来执行此操作,但是似乎无法在使用中的文件中对其进行修改

OpenXML是一种API,用于创建/读取/修改 Office文档(准确地说是Office 2010+),该文档遵循现代XML文档格式,例如 Word 2010 。它是通过直接在文件级别而不是使用COM操纵文档来实现的。实际上,它根本不需要在计算机上安装Word!这使OpenXML成为与Office文档进行交互的轻量级方法。

不幸的是,如果OpenXML(或其他基于文件的方法)都针对同一文档,则不适用于Office加载项(VSTO或其他)。这是因为文档已经加载到说Word中,而Word正在托管您的加载项。任何尝试修改表示已加载文档的基础文件(包括除Word或Word API以外的其他OpenXML文件)的尝试都会遇到以下问题:

违反共享

换一种说法:

  1. 要运行Office加载项,必须先运行Office应用。这称为托管
  2. 您的外接程序精心安排的Office文档操作要求首先将文档加载到Office应用中
  3. 任何外部 Windows进程或进程内(加载项)操作都不能直接 更改基础Office文档文件,而该文件已在Office应用程序中打开。 (加载项可以使用Office API 间接保存到文件中,并要求Office应用保存,尽管通常此类API不会向调用者公开任何原始文件接口,因此以后可能不一样)

该怎么办?

我的建议是:

a)使用纯OpenXML方法并丢弃Office加载项或...

b)使用纯Office加载项(VSTO)方法并丢弃OpenXML代码

考虑到您似乎已经通过OpenXML方法获得了用于形状和图片的代码,也许选项 a)是最好的。

另请参见