VSTO C#:能否为Word文档中现有InlineShape添加链接?
为Word已存在的InlineShape添加链接(VSTO C#)
可以实现,但Word对象模型没有提供直接给已嵌入的InlineShape添加链接的API,需要根据InlineShape的类型选择不同的间接方式:
方法一:替换为链接式InlineShape(通用方案)
对于图片、普通OLE对象等大多数类型,最可靠的方式是删除原嵌入形状,在相同位置重新插入带链接的版本,同时还原原形状的尺寸和位置:
using Microsoft.Office.Interop.Word; public void ConvertToLinkedInlineShape(Document activeDoc, InlineShape targetShape, string sourceFile) { // 保存原形状的位置、尺寸信息 Range originalRange = targetShape.Range; float originalWidth = targetShape.Width; float originalHeight = targetShape.Height; // 删除原嵌入形状 targetShape.Delete(); // 在原位置插入带链接的形状 InlineShape linkedShape = activeDoc.InlineShapes.AddPicture( FileName: sourceFile, LinkToFile: true, SaveWithDocument: false, Range: originalRange ); // 还原原形状的尺寸 linkedShape.Width = originalWidth; linkedShape.Height = originalHeight; }
方法二:重置OLE对象的链接(仅适用于特定场景)
如果目标InlineShape是原本通过链接插入、后来断开链接的OLE对象(比如Excel表格、Word文档对象),可以直接重置LinkFormat.SourceFullName属性恢复链接:
public void ReconnectOLELink(InlineShape oleShape, string sourceFile) { if (oleShape.Type == WdInlineShapeType.wdInlineShapeOLEObject && oleShape.LinkFormat != null) { oleShape.LinkFormat.SourceFullName = sourceFile; oleShape.LinkFormat.Update(); } }
注意事项
- 方法一通用性强,但会丢失原形状的特殊格式(如裁剪、艺术效果),需要额外代码保留这些属性。
- 方法二仅对原本有链接属性的OLE对象有效,如果是完全嵌入的OLE对象,
LinkFormat属性会为null,无法使用此方法。
内容的提问来源于stack exchange,提问作者Dgo
相关产品推荐
相关产品推荐

