Word VSTO 选择两个浮动形状时Selection对象意外包含未选中的内嵌形状
Word VSTO 异常:选中浮动形状时
Selection.InlineShapes 包含未选中对象 复现步骤
- 通过桌面端应用打开新建的Office 365 Word文档
- 连续按回车键换行8-10次
- 将光标定位到第5行附近,插入一个图标
- 插入两个浮动形状,分别放在该图标的上方与下方,使图标恰好位于两个形状的锚点之间
- 按住Ctrl键同时选中上述两个浮动形状
测试代码
Selection selection = app.ActiveWindow.Selection; InlineShapes inShapes = selection.InlineShapes; ShapeRange shapes = selection.ShapeRange;
预期与实际表现
- 预期:选中浮动形状时,
inShapes集合无任何对象 - 实际:
inShapes集合包含此前插入的、未被选中的图标对象- 当前 Selection 类型返回值为
WdSelectionType.wdSelectionShape - 表现与预期不符
问题原因与解决方法
原因
该现象是Word对象模型的既定行为:当选中的浮动形状共享同一锚点段落时,Selection对象会自动关联该锚点段落内的所有内联形状,即使这些内联形状完全不在用户的选中范围内。
解决方法
- 当
selection.Type为WdSelectionType.wdSelectionShape时,直接跳过读取selection.InlineShapes的逻辑,此时该集合返回的结果不具备选中范围的参考价值。 - 若需要获取选中浮动形状关联的锚点范围内的内联形状,可通过
selection.ShapeRange.Anchor获取锚点对应的文本范围,再读取该文本范围下的InlineShapes集合,即可精准拿到目标范围内的对象,避免误纳入未选中的形状。
内容的提问来源于stack exchange,提问作者prakashra
相关产品推荐
相关产品推荐

