如何在PowerPoint VSTO插件中用C#代码控制SmartArt文本窗格显隐?
在PowerPoint VSTO插件中用C#控制SmartArt文本窗格的显隐
我刚好碰到过类似的问题,你找不到SmartArt.TextPane的原因很简单——这个文本窗格属性其实属于SmartArt对应的Shape对象,而非SmartArt本身。下面是具体的解决代码,以及针对你提到的「首次点击箭头显示文本窗格时错乱」问题的修复方案:
核心逻辑说明
SmartArt的文本窗格是依附于它所在的Shape实例的,所以我们需要先获取SmartArt对应的Shape对象,再通过Shape.TextFrame2.TextPane来控制其显隐状态。
修改后的完整代码
调整你现有的代码,新增对Shape对象的存储,然后调用正确的属性来控制文本窗格:
using core = Microsoft.Office.Core; using pp = Microsoft.Office.Interop.PowerPoint; public static void CreateOrgChart() { pp.Application app; pp.Presentation pres; core.SmartArt sa; core.SmartArtLayout layout; pp.Shape smartArtShape; // 新增:保存SmartArt对应的Shape对象 app = Globals.ThisAddIn.Application; pres = app.ActivePresentation; layout = app.SmartArtLayouts[97]; // 97 对应组织结构图布局 // 先添加SmartArt并获取关联的Shape smartArtShape = pres.Slides[1].Shapes.AddSmartArt(layout); sa = smartArtShape.SmartArt; // 控制文本窗格显隐的正确代码 smartArtShape.TextFrame2.TextPane.Visible = core.MsoTriState.msoTrue; // 显示文本窗格 // smartArtShape.TextFrame2.TextPane.Visible = core.MsoTriState.msoFalse; // 隐藏文本窗格 }
修复首次显示错乱问题
针对你遇到的首次点击箭头时文本窗格显示错乱的问题,我们可以通过先强制隐藏再显示的方式,触发PowerPoint内部的布局渲染逻辑,修复这个异常:
// 先隐藏再显示,强制触发正确的布局渲染 smartArtShape.TextFrame2.TextPane.Visible = core.MsoTriState.msoFalse; smartArtShape.TextFrame2.TextPane.Visible = core.MsoTriState.msoTrue;
这样操作后,文本窗格会被PowerPoint正确渲染,不会出现错乱的情况。
额外注意事项
- 确保已引用
Microsoft.Office.Core命名空间,MsoTriState枚举来自该命名空间; - 操作TextPane前,务必确认SmartArt Shape已成功创建,避免空引用异常;
- 如果是对已存在的SmartArt进行操作,只需先获取对应的Shape对象,再执行上述Visible属性设置即可。
内容的提问来源于stack exchange,提问作者Chandraprakash
相关产品推荐
相关产品推荐

