如何使用C#Interop

时间:2018-11-23 10:07:08

标签: c# .net ms-word interop office-interop

使用

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

我可以替换“ currentDocument”中的第一个图像。

如何检测图像位于哪一页(或者在这种情况下也足够:如果图像在第一页上)?

我想替换第一页上的特定图像,所以甚至有可能提取图像或检查图像是否是我要寻找的图像?

2 个答案:

答案 0 :(得分:1)

要回答您的特定问题:如何检测图像位于哪一页?

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

Shape始终锚定到文档中的特定字符-这是Shape(Range)的Shape.Anchor属性。

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

         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());
        }

答案 1 :(得分:0)

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

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

但是我仍然会对其他更好,更优雅的解决方案以及了解页码的可能性感兴趣。