如何在整个powerpoint文件中得到相同的形状或图片并进行替换?

How to get the same shape or picture in the whole powerpoint file and replace them?

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

我尝试使用 OpenXml 来做到这一点,但似乎无法 在使用的​​文件中修改 。它似乎不能用作 Office 插件,因为 它不能处理已经打开的文件

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

谢谢

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


I am ... developing a office add-in. I need to identify same shapes and pictures and replace them. I try to use OpenXml to do that but it doesn't seem to be able to be modified in files in use.

OpenXML is an API for creating/reading/modifying Office documents (Office 2010+ to be exact) that adhere to the contemporary XML document format such as Word 2010. It does so by manipulating the document directly at the file level rather than using COM。事实上,它根本不需要在机器上安装 Word!这使得 OpenXML 成为一种 light-weight 与 Office 文档交互的方法。

不幸的是,OpenXML(或其他 file-based 方法)不适合 Office add-ins(VSTO 或其他),如果两者都针对同一文档。这是因为文档已经加载到 Word 中,并且 Word 正在托管您的 add-in。任何试图修改表示已加载文档的基础文件(包括除 Word 或 Word API 以外的任何方式的 OpenXML)的尝试都会遇到:

sharing violation

换句话说:

  1. 为了 运行 您的 Office add-in Office 应用需要先 运行ning。这被称为 hosting
  2. 由您add-in编排的 Office 文档操作需要先将文档加载到 Office 应用程序
  3. 没有外部Windows进程或in-process(add-in)操作可以直接改变在 Office 应用程序中打开的基础 Office 文档文件。 (Add-ins 可以使用 Office API 间接 保存到文件并要求 Office 应用程序 保存 虽然通常此类 API 不会公开任何原始文件接口到调用者所以后者可能不是一回事)

怎么办?

我的建议是:

a) 使用纯 OpenXML 方法并丢弃 Office add-in 或...

b) 使用纯 Office add-in (VSTO) 方法并丢弃 OpenXML 代码

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

另见