Word加载项:基于文档的路径禁用“另存为”

时间:2018-06-25 02:26:49

标签: c# ms-word ribbon office-addins

我需要编写一个Word加载项(支持2013+),以根据当前打开的文档的路径(例如,文档的存储位置)有条件地禁用“另存为”选项/标签。

我正在使用C#,并且具有以下xml,该XML会禁用该标签,但可悲的是,该文档对每个文档都是如此:

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
  <backstage>
    <button idMso="FileSaveAs" visible="false"/>
    <tab idMso="TabSave" visible="false"/>
  </backstage>
</customUI>

我尝试过:

  • DocumentBeforeSave-Handler:让我显示一个错误对话框,但不隐藏“另存为”
  • 使用getVisible而不是在xml中可见来引用回调:从未调用过这些回调,即使在通过ribbon.Invalidate()使功能区无效之后也是如此。

非常感谢您的帮助。谢谢。

2 个答案:

答案 0 :(得分:0)

以下方法可在Word 2013,Word 2016和Word 2019中使用(不允许隐藏/禁用内置选项卡的回调,但不能使用Commands。)

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" xmlns:x="MyComAddin.Connect" onLoad="RibbonOnLoad">
    <commands>
        <command idMso="TabSave" getEnabled="GetEnabledCallback" />
    </commands>
    <backstage onShow="BackstageOnShowCallback">
    </backstage>
</customUI>

然后只需从BackstageOnShowCallback和DocumentChange事件中调用Ribbon.Invalidate()(DocumentChange事件,否则在要控制的文档和不希望控制的文档之间切换会产生不一致的结果)。

它只需要Ribbon.InvalidateControlMso(“ TabSave”)-但是,如果要对按钮FileSave,FileSaveAs等执行相同的操作,则全局Ribbon.Invalidate()更简单。

当后台中的同一件事不起作用时,Command回调可以在内置选项卡等上工作,这真让人感到惊讶。

答案 1 :(得分:0)

有点晚了,但认为这可能会有所帮助..

ribbon xml 只是一个字符串,因此可以被操纵。

功能区 XML:

<backstage>
  <tab idMso="TabSave" visible="%IsSaveTabVisible%"/>
</backstage>

代码:

public string GetCustomUI(string ribbonID)
{
    try
    {
        string ribbonXml = GetResourceText("Ribbon.xml");
        if (...)
            ribbonXml = ribbonXml.Replace("%IsSaveTabVisible%", "true");
        else
            ribbonXml = ribbonXml.Replace("%IsSaveTabVisible%", "false");
        return ribbonXml;
    }
    catch (Exception ex)
    {
        Message.ShowError(ex);
        return string.Empty;
    }
}

-- 编辑 --

重新阅读您的帖子,并意识到您希望每次文档更改时都能看到可见性。我认为这种方法行不通,因为我认为它只能在 Word 启动时应用。