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

标签 c# vsto office-js openxml-sdk ribbonx

合而为一VSTOMS WORD 项目中,我使用 VS2017 - Update 1809WORD 2010-2016 创建了一个带有按钮的自定义 Office 功能区,如下所示。 问题:如何使用 Open XML SDK 2.5 for Office 实现完全相同的效果类似VS2017 - Open XML for 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>

上述ribbon中按钮的回调方法:

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,如所述 here 。新的 Office 外接程序功能不支持我的旧 VSTO 外接程序所支持的某些功能。

最佳答案

不幸的是,你的想象是不可能的。

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

出于同样的原因,COM 加载项加载的功能区 XML(基于 IDTExtensibility2,无论是 VSTO 还是任何其他 COM 加载项)必须与该加载项中的代码配合使用。 Ribbon 的回调不能位于任何其他“容器”中,尽管回调代码可以调用“容器”之外的代码。 (请注意,VSTO 功能区无法由 VBA 代码调用...并且功能区存储在任何文档中。)

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

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

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

如果您认为某个特定功能应该具有非常高的优先级,那么您应该使用 UserVoice 进行 Office 开发。如果请求已经提出,请投票。如果找不到,请创建一个。

关于c# - 如何使用 Open XML SDK for Office 创建 MS WORD 加载项功能区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54622826/

相关文章:

c# - Windows 服务调试

excel - Excel文档级部署问题

c# - 如何在 C# 中检查 Excel 范围是否为空

c# - 使用c#在Excel中生成动态生成的范围名称

azure - 使用 React 和 Yeoman Office-Generator 在 Outlook 插件上实现许可证

C# 如何使用 #if 为调试和发布提供不同的编译结果?

c# - 新授权模型中的复杂条件 (AND/OR) - ASP.NET Core?

c# - 托管 UserControl 设计器的 ToolStripControlHost 不会发生序列化

javascript - Excel SelectionChanged 事件未触发

javascript - 获取 Word 文档的 body.text 内容不会返回列表项目符号/编号