C# 如何使用C Interop检查形状/图像位于word文档的哪一页

C# 如何使用C Interop检查形状/图像位于word文档的哪一页,c#,.net,ms-word,interop,office-interop,C#,.net,Ms Word,Interop,Office Interop,使用 我可以替换当前文档中的第一个图像 如何检测图像位于哪一页,或者在这种情况下,如何检测图像是否位于第一页 我想替换第一页上的一个特定图像,那么是否有可能提取该图像或检查该图像是否是我正在寻找的图像?我在发布问题后发现的一种方法是生成图像的哈希代码: var shapes = currentDocument.Shapes; foreach (Shape shape in shapes) if (shape.Type == MsoShapeType.msoPicture) {

使用

我可以替换当前文档中的第一个图像

如何检测图像位于哪一页,或者在这种情况下,如何检测图像是否位于第一页


我想替换第一页上的一个特定图像,那么是否有可能提取该图像或检查该图像是否是我正在寻找的图像?

我在发布问题后发现的一种方法是生成图像的哈希代码:

var shapes = currentDocument.Shapes;
foreach (Shape shape in shapes)
    if (shape.Type == MsoShapeType.msoPicture)
    {
        InlineShapeHelper.ReplaceInlineShape(...);
        break;
    }

但我仍然对其他更好、更优雅的解决方案感兴趣,并有可能了解页码。

回答您的具体问题:如何检测图像位于哪一页

get_Information方法可以使用枚举Word.WdInformation.wdActiveEndPageNumber返回给定范围的页码

形状始终定位到文档中的特定字符-这是Shape Shape.Anchor的范围属性

下面的代码示例演示如何循环文档中的形状,获取它们的名称和页码。请注意,如果Shape.Name是已知的,则可以直接拾取Shape对象Shapes[Name As String]。但在插入Shape时,您需要小心使用Word应用程序生成的名称,因为Word可以随时更改它为自己指定的名称。如果使用代码指定名称,则该名称保持不变-Word不会更改它

var shapes = currentDocument.Shapes;
foreach (Shape shape in shapes)
    if (shape.Type == MsoShapeType.msoPicture)
    {
        int hash = shape.GetHashCode();
        InlineShapeHelper.ReplaceInlineShape(...);
        break;
    }
         Word.ShapeRange shpRange = doc.Content.ShapeRange;
        foreach (Word.Shape shp in shpRange)
        {
            System.Diagnostics.Debug.Print(shp.Name + ", " + shp.Anchor.get_Information(Word.WdInformation.wdActiveEndPageNumber).ToString());
        }