Visio2013及以上版本VSDX转VDX失败问题及VSD转VDX可行性咨询
解决Visio Interop转换VDX后Viewer无法打开的问题及版本支持说明
一、转换失败的可能原因与解决办法
你的POC代码逻辑框架没问题,但生成的VDX无法被Viewer识别,大概率是几个细节没处理到位,给你梳理下修复方向:
明确指定VDX保存格式枚举
Visio的SaveAs方法如果不主动指定格式,可能会默认匹配原文档的格式逻辑,导致生成的文件不符合Viewer要求的标准VDX结构。修改代码时要加上格式参数:// 明确指定保存为标准VDX格式 vsdDoc.SaveAs(dataDir + "SaveDiagramToVDXwithVSTO_out.vdx", Visio.VisSaveAsSaveTypes.visSaveAsVDX);补充文档关闭与Visio进程退出步骤
后台运行Visio时,如果不主动关闭文档并退出应用,很可能导致文件写入不完整(比如部分元数据未刷新)。在代码末尾补充这些操作:// 关闭文档 vsdDoc.Close(); // 退出Visio应用 vsdApp.Quit(); // 释放COM对象,避免内存泄漏和进程残留 System.Runtime.InteropServices.Marshal.ReleaseComObject(vsdDoc); System.Runtime.InteropServices.Marshal.ReleaseComObject(vsdApp);处理兼容性模式问题
如果原VSD是Visio 2010及更早版本创建的,Visio 2019打开它会自动进入兼容性模式,这可能影响转换后的文件结构。可以先检查并转换为当前版本格式:if (vsdDoc.CompatibilityMode != Visio.VisCompatibilityModes.visCMCurrent) { // 将文档转换为当前Visio版本格式 vsdDoc.Convert(); }临时排查:让Visio可见运行
后台运行可能会缺少某些UI相关的初始化组件,你可以临时把vsdApp.Visible = true;打开,运行转换后查看生成的VDX是否能正常打开。如果可以,再针对性排查后台运行的权限或组件加载问题。
二、关于VSD转VDX的版本支持
并不是只有Visio 2010编辑器能实现VSD转VDX,Visio 2013及以后的版本(包括2019)完全支持这个转换操作。只是从Visio 2013开始,VSD被标记为旧格式,打开时会进入兼容性模式,只要处理好上面提到的格式指定和兼容性转换,就能正常生成可被Viewer识别的VDX文件。
内容的提问来源于stack exchange,提问作者HariniReddy




