VSTO加载项导致Word兼容模式及自动保存行为异常问题咨询
兼容模式显示异常问题
你遇到的兼容模式标识问题核心原因出在SaveAs2方法的CompatibilityMode参数上:
WdCompatibilityMode.wdCurrent是动态值,其实际取值和你项目引用的Office Interop程序集版本绑定,如果你的Interop版本低于Office 2016,wdCurrent对应的枚举值就是15,对应Word 2013的兼容模式,这也是你排查到CompatibilityMode返回值为15的原因。- 直接将
CompatibilityMode参数替换为常量16(对应wdWord2016的枚举值)即可解决,保存后的文档就会以Word 2016原生模式打开,不会再显示兼容模式标识。
自动恢复文档异常打开、标题栏显示[last saved by user]问题
这个问题和你注册的事件以及文档打开时的逻辑直接相关:
- 重复注册事件冲突:你给
Application.DocumentOpen事件重复绑定了两次回调(WorkWithDocument和Application_DocumentOpen),事件重复触发会直接干扰Word内置的自动恢复文档处理逻辑,自动恢复文档原本只在左侧面板显示预览,被事件触发的逻辑修改状态后就会直接完整打开。 - 全局属性修改逻辑问题:你每次打开文档都会修改
Application.Options的全局配置,其中SaveNormalPrompt = false会打乱Word对自动恢复文档、Normal模板的默认保存判定规则,进而触发顶部的黄色保存提示条。 - 视图修改逻辑未做场景过滤:你修改
ActiveWindow.View.ShowHiddenText的逻辑没有区分正常文档和自动恢复临时文档,自动恢复文档(后缀为.asd)被修改视图属性后,就会从后台预览状态转为正式打开状态。 - 个人信息配置影响:你在文档保存前强制设置
Doc.RemovePersonalInformation = false,会让Word保留所有编辑者信息,如果当前登录用户和文档上次编辑者不一致,标题栏就会出现[last saved by user]的标识。
排查优化步骤
- 删掉重复绑定的
Application.DocumentOpen事件,保留一个回调即可。 - 将
SaveAs2方法中的CompatibilityMode: WdCompatibilityMode.wdCurrent替换为CompatibilityMode: 16,验证兼容模式问题是否解决。 - 将修改
Application.Options的逻辑移到加项启动入口执行,不要每次打开文档都重复修改全局配置。 - 给视图修改逻辑加过滤规则:先判断当前文档的后缀是否为
.asd、路径是否为系统默认的自动恢复文件夹路径,仅对用户主动打开的正常文档执行视图属性修改。 - 给
RemovePersonalInformation的修改逻辑加触发条件,仅当用户主动触发保存、且当前文档为用户新建/打开的正常文档时修改该属性,不要对所有保存场景生效。
内容的提问来源于stack exchange,提问作者nomacreates
相关产品推荐
相关产品推荐

