C#word互操作表形状位置

时间:2011-10-28 09:39:52

标签: c# interop office-interop

我正在尝试执行以下操作: 根据表格中单元格中的值插入箭头。 这部分,我工作得很好。 箭头的颜色应该是有条件的,并且同样适用。

但我的问题是: 如何确定放置它的正确位置。 我已经得出结论有两个问题:

垂直:跨越页面。对于1页,它可以工作,一旦我尝试第二页,它就将形状放在第一页上 水平:相对于表格中输入的文字的右侧位置。

这是我现在的垂直定位代码:

private float getVertical(Word.Range r)
    {
        return (float)r.Characters.Last.get_Information(
            Microsoft.Office.Interop.Word.WdInformation.wdVerticalPositionRelativeToPage);
    }

水平代码(基本上将同一行的每个cel的宽度添加到实际单元格宽度的三分之二)

 private float getHorizontal(Word.Range r, Word.Table tab, int col)
    {
        float i1, i2 = 0.0f, i3;
        i1 = (tab.Cell(2, col).Width / 3) * 2;
        int i;
        for (i = 1; i < col; i++)
        {
            i2 += tab.Cell(2, i).Width;
        }
        i3 = i1 + i2;
        return i3;
    }

欢迎并赞赏任何和所有建议,

问候

暗影

1 个答案:

答案 0 :(得分:2)

最后我已经弄明白了,并且为了将来的参考和文档目的而永恒(永恒?): - )。

我之前没有做的是:为形状添加锚点范围 我在哪里找到:无处不在,不得不通过使用形状链接到锚点的MSDN文档弄明白,如果你没有指定,c#会将你的形状放在默认范围内(在我的情况下的第一页) 解决方案 :(请注意,这是代码的摘录,假设有一些关于单词互操作的知识。如果需要更多信息,请不要犹豫。)

//create word document  
--some code  

//insert page break here    
--some code   

//insert paragraph  
--some code    

//insert table here
--some code  

//define range  
Word.Range shapeAnchor = doc.Bookmarks.get_Item(ref oEndOfDoc).Range;  

//insert shape  
Microsoft.Office.Core.MsoAutoShapeType sh =  
Microsoft.Office.Core.MsoAutoShapeType.msoShapeUpArrow;   

Word.Shape shh = doc.Shapes.AddShape(sh.GetHashCode(), x, y, 
width, height, shapeAnchor);

实际写出的代码可以放入一个函数中,然后它将始终有效。

问候,

暗影