c# word互操作表形状位置

本文关键字:位置 操作表 word 互操作 | 更新日期: 2023-09-27 18:12:34

我想做以下事情:根据表中单元格中的值插入箭头。这部分,我做得很好。箭头的颜色应该是有条件的,而且效果也很好。

但我的问题是:我怎样才能确定放置它的正确位置?我把这归纳为两个问题:

纵向:跨页。对于第一页,它可以工作,当我在第二页尝试它时,它将形状放置在第一页上。
水平:相对于表中输入文本的正确位置。

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

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

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

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

欢迎所有建议,

的问候

暗影烈焰

c# word互操作表形状位置

我终于弄明白了,为了将来的参考和文档目的,我正在永久保存它:-)。

我之前没有做的是:添加一个锚定范围到形状。
我在哪里找到这个:无处可去,不得不通过使用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);

实际写出来的代码可以放入函数中,这样函数就可以一直工作。

问候,

暗影烈焰