2015-05-14 49 views
0

你好StackOverflowers,字织带命令截取

我有在Word外接下面色带XML代码(VS 2012/.NET 4.5):

<?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 onMsoCommand(IRibbonControl control, ref bool Cancel) 
{ 
    Cancel = false; 
    Logger.LogEvent(control.Id); 
} 

我想拦截这些命令来完成额外的任务。对于Word 2010和2013,一切都按预期工作,但是,对于Word 2007而言,前3条命令似乎正在工作,对于可能的原因有何建议?

附加两组命令我试图拦截:

enter image description here

谢谢

+1

你在Word中遇到任何UI错误吗?有关更多信息,请参阅[如何显示附加用户界面错误](https://msdn.microsoft.com/en-us/library/bb608619.aspx?f=255&MSPPError=-2147217396)。 –

+0

谢谢@Eugene Astafiev您的建议,这个提示确实可以帮助我找出问题所在。当我指向“显示附加UI错误”时,你保存了我的未来,非常感谢:)我将写出答案,解释我是如何解决这个问题的。 –

回答

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应用程序加载正确的命令。