2011-12-19 118 views
0

我正在尋找一種方法在光標位置插入MS Word形狀。目前我有以下代碼在預定位置插入一個形狀:在光標位置插入Word形狀

 Microsoft.Office.Interop.Word.Range CurrRange = Globals.ThisAddIn.Application.Selection.Range; 

     //Get the id of the MS Word shape to be inserted 
     int shapeId = (int)MsoAutoShapeType.msoShapeRoundedRectangle; 
     //Get the value of the name attribute from the selected tree view item 
     string nodeText = treeViewItem.GetAttribute("name"); 

     //Add a new shape to the MS Word designer and set shape properties 
     var shape = CurrRange.Document.Shapes.AddShape(shapeId, 170, 200, 100, 20); 
     shape.AlternativeText = String.Format("Alt {0}", nodeText); 
     shape.TextFrame.ContainingRange.Text = nodeText; 
     shape.TextFrame.ContainingRange.Font.Size = 8; 

其中形狀被插入被硬編碼的位置:

這可以從第二和的第三參數可以看出AddShape()方法:

在點測量到自選

200 =在位置點處測量到的自選圖形的頂部邊緣的左邊緣170 =位置

我已經看過我的Range對象的屬性和方法,但似乎無法找到任何存儲我需要的位置值的地方。

回答

2

AddShape的最後一個參數是一個Anchor,它需要一個範圍對象。嘗試通過你的範圍成:

var shape = CurrRange.Document.Shapes.AddShape(shapeId, 0, 0, 100, 20,CurrRange); 

更新:它看起來像有,因爲它不尊重錨的Word 2010個文檔bug。將文檔另存爲.doc文件並再次測試,如果這樣做,它會將其錨定到段落的開頭。上面的鏈接只是針對微軟論壇,我找不到關於該問題的連接錯誤報告。

一種解決方法是指定頂部和左側根據選擇的位置:

Microsoft.Office.Interop.Word.Range CurrRange = Globals.ThisAddIn.Application.Selection.Range; 

//Get the id of the MS Word shape to be inserted 
int shapeId = (int)MsoAutoShapeType.msoShapeRoundedRectangle; 

//Get the value of the name attribute from the selected tree view item 
string nodeText = "Hello World"; 

var left = Globals.ThisAddIn.Application.Selection.get_Information(Microsoft.Office.Interop.Word.WdInformation.wdHorizontalPositionRelativeToPage); 
var top = Globals.ThisAddIn.Application.Selection.get_Information(Microsoft.Office.Interop.Word.WdInformation.wdVerticalPositionRelativeToPage); 

//Add a new shape to the MS Word designer and set shape properties 
var shape = CurrRange.Document.Shapes.AddShape(shapeId, left, top, 100, 20); 
shape.AlternativeText = String.Format("Alt {0}", nodeText); 
shape.TextFrame.ContainingRange.Text = nodeText; 
shape.TextFrame.ContainingRange.Font.Size = 8; 
+0

我已經嘗試過這一點,它不work.The形狀仍插在同一位置 – 2011-12-20 05:19:25

+0

我用微軟論壇上的一些信息更新了我的答案。 – 2011-12-20 14:15:59

+0

我在msdn上也遇到過這個帖子 - http://social.msdn.microsoft.com/Forums/en-US/vsto/thread/53d9baff-c10c-4655-822a-4c7a1b0fa885/然而,left和top值總是需要增加70,否則形狀插入光標左上方几釐米......這很奇怪,我不完全確定它爲什麼必須完成,但它確實似乎工作。謝謝爲了努力,標記爲已回答 – 2011-12-21 05:24:20