2011-10-28 43 views
1

我试图执行以下操作: 根据表格中单元格中的值插入箭头。 这部分,我工作得很好。 箭头的颜色应该是有条件的,并且工作得很好。C#字互操作表形状位置

但我的问题是这样的: 我怎样才能确定放置它的正确位置。 我已经总结了这2个问题:

垂直:跨页。对于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; 
    } 

任何和所有的建议都表示欢迎和赞赏,

问候

ShadowFlame

回答

1

最后我终于弄明白了,为了将来的参考和文档目的:永恒(永恒?):-)。

我以前没有做过的事情是:为形状添加一个锚范围。
我在哪里找到这个:无处不在,必须使用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); 

的代码。实际上写出来的东西可以放入一个函数中,然后这个函数会一直工作。

问候,

暗影