2011-10-28 1 views
1

다음을 수행하려고합니다. 표의 셀 값을 기준으로 화살표를 삽입하십시오. 이 부분은 잘 작동합니다. 화살표의 색상은 조건부 여야하며 똑같이 잘 작동합니다.C# 단어 interop 테이블의 모양 위치

그러나 내 문제는 다음과 같습니다. 정확한 위치를 어떻게 식별 할 수 있습니까? 나는이 문제를 2 가지 문제로 결론 지었다 :

: 스패닝 페이지. 1 페이지의 경우, 두 번째 페이지를 시도하자마자 첫 번째 페이지에 도형이 배치됩니다.
가로 : 테이블에 입력 된 텍스트에 상대적인 올바른 위치.

는 지금이 수직 위치에 대한 코드이다

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

수평에 대한 코드 (기본적으로 실제 셀의 폭 3분의 2 행의 동일 행의 모든 ​​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; 
    } 

일체의 제안을 환영하고 감사합니다,

인사말

그림자 그림자

답변

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

코드입니다.. 실제로 작성된 내용은 항상 작동 할 수있는 함수에 넣을 수 있습니다.

인사말,

암흑