2011-10-28 41 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); 

的代碼。實際上寫出來的東西可以放入一個函數中,然後這個函數會一直工作。

問候,

暗影