2011-02-02 14 views
1

好的,这让我难住了一段时间 - 我们的客户之一希望将其所有图像替换为word文档列表。查找图像本身是好的,与示例代码如下:使用C#在Autoshapes中编辑Word图像

Microsoft.Office.Interop.Word.Application wordDoc; 
    wordDoc = new Microsoft.Office.Interop.Word.Application(); 
    object docName = @"c:\temp\Client.doc"; 


    object objBool = false; 
    object objBoolTrue = true; 
    object objNull = System.Reflection.Missing.Value; 

    Document openDoc = null; 

    openDoc = wordDoc.Documents.Open(ref docName, ref objBool, ref objBool, ref objBool, ref objNull,ref objNull, ref objNull, ref objNull, ref objNull, ref objNull, ref objNull, ref objNull, ref objNull, ref objNull, ref objNull, ref objNull); 

    List<Microsoft.Office.Interop.Word.Range> ranges = new List<Microsoft.Office.Interop.Word.Range>(); 
    foreach (Microsoft.Office.Interop.Word.Shape s in openDoc.Shapes) 
    { 
     // do stuff here with comparing and replacing images 
    } 

不过,我注意到,它并没有认识到某些图像(无论他们是在那里的,这不是一个页眉或页脚的问题)。在进一步的研究看来,图像本身不是一个正常的嵌入图像,而是一个Autoshape。

因此,我的代码也必须能够检查文档中的自动形状,并根据需要更改它们。然而,在我的生活中,我无法确定如何检查autoshape中的图像。

寻找自己的自选图形是相当简单,如下:

ranges = new List<Microsoft.Office.Interop.Word.Range>(); 
foreach (Microsoft.Office.Interop.Word.Shape s in openDoc.Shapes) 
{ 
... 
} 

然而,一旦我确定自选图形,我不能确定我是如何找到的封闭图像信息。

有没有人知道我会怎么做呢?

回答

1

您可能有一个分组图像,在这种情况下,您应递归搜索GroupItems或文本框内的内联图像,在这种情况下,您应该查看TextFrame.TextRange.ShapeRange的内部。

+0

非常感谢您的回答。我仍然没有工作,但是你指出了我的正确方向。 – Adam 2011-02-02 01:57:31