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
中记录了我的愿望。