Word功能区命令拦截

时间:2015-05-14 11:10:04

标签: c# xml ms-word ms-office add-in

Hello StackOverflowers,

我在Word Addin(VS 2012 / .NET 4.5)中有以下功能区xml代码:

<?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" >

  <commands>
    <!-- Working commands -->
    <command idMso="ReviewTrackChanges"  onAction="onMsoToggleCommand"/>
    <command idMso="SmartArtInsert" onAction="onMsoCommand"/>
    <command idMso="Thesaurus" onAction="onMsoCommand"/>

    <!-- NOT Working commands -->
    <command idMso="MailMergeStartLetters" onAction="onMsoToggleCommand"/>
    <command idMso="MailMergeStartEmail" onAction="onMsoToggleCommand"/>
    <command idMso="MailMergeStartEnvelopes" onAction="onMsoToggleCommand"/>
    <command idMso="MailMergeStartLabels" onAction="onMsoToggleCommand"/>
    <command idMso="MailMergeStartDirectory" onAction="onMsoToggleCommand"/>
    <!-- NOT Working commands as well?!-->
    <command idMso="ReviewCompareTwoVersions" onAction="onMsoCommand"/>
    <command idMso="ReviewCombineRevisions" onAction="onMsoCommand"/>
  </commands>
</customUI>

相应的回调是:

public void onMsoToggleCommand(IRibbonControl control, bool pressed, ref bool cancelDefault)
{
   cancelDefault = false;
   Logger.LogEvent(control.Id);
}

public void onMsoCommand(IRibbonControl control, ref bool Cancel)
{
   Cancel = false;
   Logger.LogEvent(control.Id);
}

我想截取这些命令以进行额外的任务。对于Word 2010和2013,一切都按预期工作,但是,对于Word 2007,只有前3个命令似乎正常工作,有什么建议可能是什么原因?

附加我尝试拦截的两组命令:

enter image description here

谢谢,

1 个答案:

答案 0 :(得分:0)

基于@Eugene Astafiev的评论,我终于能够解决这个问题了。事实上,原始的XML功能区代码是这样的(注意中间存在一些Excel命令):

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" >
  <commands>
    <!-- Working Word commands -->
    <command idMso="ReviewTrackChanges"  onAction="onMsoToggleCommand"/>
    <command idMso="SmartArtInsert" onAction="onMsoCommand"/>
    <command idMso="Thesaurus" onAction="onMsoCommand"/>

    <!-- Excel Commands -->
    <command idMso="Connections" onAction="onMsoCommand"/>
    <command idMso="Refresh" onAction="onMsoCommand"/>
    <command idMso="RefreshAll" onAction="onMsoCommand"/>

    <!-- NOT Working Word commands -->
    <command idMso="MailMergeStartLetters" onAction="onMsoToggleCommand"/>
    <command idMso="MailMergeStartEmail" onAction="onMsoToggleCommand"/>
    <!-- Remaining Word commands.. -->
  </commands>
</customUI>

因此,当Word 2007尝试读取此XML时,它会遇到Excel命令,并且因为它无法识别它们,所以它只是用其余的XML忽略它们,因此其余的Word命令不会被调用!对于Word 2010和2013,它的工作非常完美。
最后,我将Word和Excel功能区命令分成两个xml文件,然后根据Office应用程序加载正确的文件。