Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.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# 如何使用Open XML SDK for Office创建MS WORD加载项功能区_C#_Vsto_Office Js_Openxml Sdk_Ribbonx - Fatal编程技术网

C# 如何使用Open XML SDK for Office创建MS WORD加载项功能区

C# 如何使用Open XML SDK for Office创建MS WORD加载项功能区,c#,vsto,office-js,openxml-sdk,ribbonx,C#,Vsto,Office Js,Openxml Sdk,Ribbonx,在MS WORD的一个项目中,我使用VS2017-更新1809为WORD 2010-2016创建了一个带有按钮的自定义Office功能区,如下所示问题:如何在类似项目中实现完全相同的使用?我在网上没有找到这样的例子: VSTO示例中的功能区: <?xml version="1.0" encoding="UTF-8"?> <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="R

MS WORD
的一个项目中,我使用
VS2017-更新1809
WORD 2010-2016
创建了一个带有按钮的自定义Office功能区,如下所示问题:如何在类似项目中实现完全相同的使用?我在网上没有找到这样的例子:

VSTO示例中的功能区:

<?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon_Load">
  <ribbon>
    <tabs>
      <tab idMso="TabAddIns" label="my Ribbon Tab">
        <group id="ContentGroup" label="Content">  
          <button id="textButton" label="Insert Text" screentip="Text" onAction="OnTextButton"  
             supertip="Inserts text at the cursor location."/> 
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>
public void OnTextButton(Office.IRibbonControl control)
        {
            Word.Range currentRange = Globals.ThisAddIn.Application.Selection.Range;
            currentRange.Text = "This text was added by the Ribbon.";
        }
更新

<?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon_Load">
  <ribbon>
    <tabs>
      <tab idMso="TabAddIns" label="my Ribbon Tab">
        <group id="ContentGroup" label="Content">  
          <button id="textButton" label="Insert Text" screentip="Text" onAction="OnTextButton"  
             supertip="Inserts text at the cursor location."/> 
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>
public void OnTextButton(Office.IRibbonControl control)
        {
            Word.Range currentRange = Globals.ThisAddIn.Application.Selection.Range;
            currentRange.Text = "This text was added by the Ribbon.";
        }

动机:我为MS WORD创建了一个VSTO插件,它在WORD文档的顶部功能区中创建了一个自定义选项卡。该选项卡有多个控件(按钮、复选框等),它们通过各自的回调执行各种操作(类似于上面我的文章中所示的示例)。我想使用Open XML SDK for Office将该VSTO加载项转换为相同的方式,因为VSTO加载项无法发布到
Microsoft Stores
,如前所述。新的office加载项功能不支持我的传统VSTO加载项所支持的某些功能。

不幸的是,您所想象的是不可能实现的

根据设计,功能区XML链接到同一“容器”中的代码。存储在Office文档中的功能区XML必须与同一文档的VBA代码中的回调一起使用。如果要使用Office Open XML将功能区XML插入Word文档,则其使用的代码必须位于同一文档中的VBA组件中。(还值得注意的是,VBA组件不是XML格式,而是二进制的,因此无法使用仅导入的开放式XML生成。)

同样,COM外接程序加载的功能区XML(基于IDTExtensibility2,无论是VSTO还是任何其他COM外接程序)必须与该外接程序中的代码一起工作。功能区的回调不能位于任何其他“容器”中,尽管回调代码可以调用“容器”外的代码。(请注意,VBA代码无法调用VSTO功能区…并且功能区未存储在任何文档中。)

使用VBA和COM加载项中的功能区XML,可以通过为功能区控件分配
Q
id来共享功能区控件。对于共享控件,只要id已知,任何容器中的代码都可以引用它们

Office JS加载项中定义的功能区还依赖于同一容器中的代码。然而,OfficeJS模型(还没有?)不支持共享控件的概念

总之:与COM对象模型相比,Office JS加载项仍然非常有限,无论是Office应用程序的对象模型还是Ribbon(“Office JS术语中的命令”)。该功能正在稳步扩展,最近重点是Excel。其他事情(希望)也会接踵而至


如果有一个特定的功能,在你看来,应该有一个非常高的优先级,你应该去UserVoice进行Office开发。如果已经提出了请求,请投票表决。如果找不到,请创建一个。

将功能区添加到文档是一回事,附加代码则完全是另一回事。您希望代码驻留在哪里?你到底想实现什么?你读过这个讨论吗@Cindymister。好问题。为了回答你的问题,我在上面的帖子中添加了一个更新部分。谢谢你的回复。我已经在
UserVoice for Office development
中记录了我的愿望。