如何在VSTO中调用被重写的内置FileSave功能?
解决调用原生FileSave功能的问题
你遇到的核心问题是:拦截原生命令后直接调用ExecuteMso会触发循环调用,而ActivateTabMso只是切换标签页,不会触发保存逻辑。正确的做法是利用cancelDefault参数来控制是否执行原生功能,不需要额外调用其他方法。
修改你的SaveIntercept方法逻辑如下:
public void SaveIntercept(IRibbonControl control, ref bool cancelDefault) { if (!IsFileSavedBefore()) { // 不取消默认操作,让Office执行原生FileSave功能 cancelDefault = false; return; } // 文件已保存过,取消默认操作,执行自定义逻辑 cancelDefault = true; // ... 这里写你的自定义保存代码 }
为什么之前的方法无效?
Application.CommandBars.ExecuteMso("FileSave"):因为你已经拦截了这个命令,调用它会再次触发你的SaveIntercept方法,导致无限循环。RibbonUi.ActivateTabMso("TabSave"):这个方法只是切换到保存相关的标签页,并不会触发实际的保存操作。
内容的提问来源于stack exchange,提问作者LechExt
相关产品推荐
相关产品推荐

