Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在整个powerpoint文件中获得相同的形状或图片并替换它们?_C#_Vsto_Office Interop_Office Addins - Fatal编程技术网

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

C# 如何在整个powerpoint文件中获得相同的形状或图片并替换它们?,c#,vsto,office-interop,office-addins,C#,Vsto,Office Interop,Office Addins,我正在使用VisualStudio并开发一个Office插件。我需要识别相同的形状和图片并替换它们 我尝试使用OpenXml来实现这一点,但它似乎无法在正在使用的文件中进行修改。它似乎不能作为office外接程序使用,因为它不能处理已打开的文件 我在网上搜索了好几个小时,但没有找到一个方法。 请帮帮我 谢谢你TL;DR:OpenXML和Office插件(包括VSTO)是针对不同用例的竞争技术,如果结合使用,可能会导致运行时问题。最好只坚持一个 我是。。。开发office插件。我需要识别相同的形

我正在使用VisualStudio并开发一个Office插件。我需要识别相同的形状和图片并替换它们

我尝试使用OpenXml来实现这一点,但它似乎无法在正在使用的文件中进行修改。它似乎不能作为office外接程序使用,因为它不能处理已打开的文件

我在网上搜索了好几个小时,但没有找到一个方法。 请帮帮我

谢谢你

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


我是。。。开发office插件。我需要识别相同的形状和图片并替换它们。我尝试使用
OpenXml
来实现这一点,但是它似乎无法在正在使用的文件中修改

是一个API,用于创建/读取/修改符合当代XML文档格式(如Word 2010)的Office文档(确切地说)。它通过在文件级别直接操作文档而不是使用。事实上,它根本不需要在机器上安装Word!这使得OpenXML成为一种与Office文档交互的轻量级方法

不幸的是,如果OpenXML(或其他基于文件的方法)和Office插件(VSTO或其他)的目标是相同的文档,则它们不适合用于Office插件。这是因为文档已经加载到say Word中,Word正在承载您的加载项。任何试图修改表示加载文档的基础文件(包括除Word或Word API以外的任何方式的OpenXML)的尝试都会遇到以下问题:

共享冲突

换言之:

  • 要运行Office插件,必须首先运行Office应用程序。这就是所谓的托管
  • 对由外接程序编排的Office文档的操作要求先将文档加载到Office应用程序中
  • 在Office应用程序中打开基础Office文档文件时,任何外部Windows进程或进程内(加载项)操作都不能直接更改该文件。(外接程序可以使用Office API间接保存到文件,并要求Office应用程序保存,尽管通常这些API不会向调用者公开任何原始文件接口,因此后者可能不是同一回事)
  • 怎么办? 我的建议是:

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

    b)使用纯Office插件(VSTO)方法并放弃OpenXML代码

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

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


        我是。。。开发office插件。我需要识别相同的形状和图片并替换它们。我尝试使用
        OpenXml
        来实现这一点,但是它似乎无法在正在使用的文件中修改

        是一个API,用于创建/读取/修改符合当代XML文档格式(如Word 2010)的Office文档(确切地说)。它通过在文件级别直接操作文档而不是使用。事实上,它根本不需要在机器上安装Word!这使得OpenXML成为一种与Office文档交互的轻量级方法

        不幸的是,如果OpenXML(或其他基于文件的方法)和Office插件(VSTO或其他)的目标是相同的文档,则它们不适合用于Office插件。这是因为文档已经加载到say Word中,Word正在承载您的加载项。任何试图修改表示加载文档的基础文件(包括除Word或Word API以外的任何方式的OpenXML)的尝试都会遇到以下问题:

        共享冲突

        换言之:

      • 要运行Office插件,必须首先运行Office应用程序。这就是所谓的托管
      • 对由外接程序编排的Office文档的操作要求先将文档加载到Office应用程序中
      • 在Office应用程序中打开基础Office文档文件时,任何外部Windows进程或进程内(加载项)操作都不能直接更改该文件。(外接程序可以使用Office API间接保存到文件,并要求Office应用程序保存,尽管通常这些API不会向调用者公开任何原始文件接口,因此后者可能不是同一回事)
      • 怎么办? 我的建议是:

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

        b)使用纯Office插件(VSTO)方法并放弃OpenXML代码

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

        另见

        如果我使用Office加载项方法,谢谢你,我如何识别相同的图片对象并替换它们?@RollingDeap24Vz2425考虑到你似乎已经通过OpenXML方法为形状和图片编写了代码,也许选项
        a)
        是最好的。谢谢,但我仍然想知道如何使用Office加载项来做到这一点?有没有办法获取原始数据?@RollingDeap24Vz2425感谢您的接受。如果您想要“原始数据”,那么基于文件的解决方案可能是更好的方法。虽然我更喜欢VSTO,但我不推荐它。这是一篇旧文章。另见。如果你觉得这样有助于喂养孩子,不要忘记向上投票;)如果我使用Office加载项方法,谢谢