C#word interopテーブルの形状の位置

私は次のことをしようとしている: 表内のセルの値に基づいて矢印を挿入します。 この部分は、うまく働いています。 矢印の色は条件付きで、同じように機能します。

しかし、私の問題はこれです: 正しい位置を特定する方法を教えてください。 私はこれを2つの問題に結びつけました:

vertically: spanning pages. For 1 page, it works, as soon as I try it for the 2nd page, it places the shapes on the first one.
Horizontally: the right posistion relative to the text that is entered in the table.

これは私が今持っている垂直配置のコードです:

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

水平のコード(基本的には、実際のセルの幅の2/3に同じ行のすべてのセルの幅を追加します)

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

すべての提案は歓迎され、評価され、

ご挨拶

陰謀

2

1 答え

まもなく、私はそれを理解して、将来の参照と文書化の目的のために永遠に(永遠に?)しています:-)。

What I didn't do previously was: add an anchor range to the shape.
Where did I find this: nowhere, had to figure it out by using the MSDN documentation that shapes are linked to anchors, and that if you do not specify, C# will put your shapes on a default range(first page in my case)
Solution:(Please note, this is an extract of code, assuming some knowledge of word interop. If any more information is required, do not hesitate to ask.)

//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);

実際に書き出されるコードは、常に機能する関数に入れることができます。

ご挨拶、

陰謀

2
追加された