2010-06-04 2 views
1

VS 2008에서 C#을 통해 MS Word 문서를 완전히 작성합니다. 페이지 나누기를 삽입하려고하는데 페이지 나누기가 삽입 될 때 대신 삽입하여 새 페이지 하단에, 그것은 휴식을 삽입하고 상단에 페이지를 추가합니다. 이 결과 첫 페이지가 마지막 페이지가됩니다. 이 진단에 도움이된다면MS Word 페이지 나누기가 잘못된 위치에 삽입 됨

+0

는 대신 "후" "전에"보이는 :

Sub InsertNewPageAtEndofDoc() Dim rng As Range Dim adRange As Range Set adRange = ActiveDocument.Range Set rng = ActiveDocument.Range(adRange.Start, adRange.End) rng.Collapse (wdCollapseEnd) rng.InsertBreak (wdPageBreak) rng.Collapse (wdCollapseEnd) End Sub 
DOK

+0

네, 정확히 그 일을합니다. 그러나 그것을 어떻게 수정해야할지 모르겠다. – mattgcon

답변

1

InsertBreak은 선택 후에 삽입되지 않습니다. MSDN remarks 참고 :

페이지 또는 열 나누기를 삽입하면 선택 영역이 나누기로 바뀝니다. 선택 항목을 바꾸지 않으려면 InsertBreak 메서드를 사용하기 전에 Collapse 메서드를 사용하십시오. 구역 나누기를 삽입하면 바로 앞에Selection 개체 앞에 나누기가 삽입됩니다.

(내 강조) 페이지 끝 부분에서 휴식을 취하려면 문서 끝에 아무 것도 선택하지 않아야한다고 생각합니다.

Document에 자체 범위가 있는지 여부를 기억할 수 없습니다. myDoc.Characters에서 모든 것을 포괄하는 범위를 얻을 수 있습니까? 그래도 문제가 해결되지 않으면되지, 내가 시도 할 것이다 제일 먼저

start = int.MaxValue; 
end = int.MaxValue; 

경우

, 당신은 ComputeStatistics()에 의존 수 있습니다. 다음과 같이 입력하십시오.

WdStatistic stats = WdStatistic.wdStatisticCharacters; 
var chars = myDoc.ComputeStatistics(stats, false); 

그런 다음 해당 값에서 범위를 만드십시오. 내가 더 많은 것을 도울 수 있기를 바란다. 그러나 그것은 나를위한 동안이었다. 행운을 빕니다!

+0

나는 캐릭터 통계에 대한 생각을하고 내가 할 수있는 것을 보게 될 것이다. 아이디어가 있지만 코드를 광범위하게 변경해야 작동 할 수 있습니다. Document.Characters.First.Start 및 Document.Characters.Last.End 범위를 사용하고 그 중 일부를 수행 할 수 있는지 확인합니다. – mattgcon

+0

캐릭터 아이디어가 효과가 있으며 현재 페이지보다 후에 삽입됩니다. – mattgcon

0

나는이 너무에서 전문가 아니에요,

   start = 0; 
       end = 0; 
       Word.Range rngDoc = Range(ref start, ref end); 
       rngDoc.Collapse(ref CollapseEnd); 
       rngDoc.InsertBreak(ref pageBreak); 
       rngDoc.Collapse(ref CollapseEnd); 

또한 각 페이지가 테이블에 의해 소비 : 여기

는 페이지 나누기를 삽입하기위한 코드입니다 이것은 단지 추측입니다. 0에서 0까지의 범위를 선택한 다음 그 값을 축소한다고해도 조금 이상하게 보입니다. 0부터 0까지의 범위는 문서의 시작 부분을 알려주는 것처럼 들리지만 대신 문서의 마지막 비트를 선택해야하지만 그렇게하는 방법을 모르겠다는 생각이들 것입니다.

+0

그래, 그게 내가 추측하고있는 것이지만, 문서 페이지가 전체 영역을 소비하는 테이블을 가지고 있기 때문에, 다음 페이지에 오류가 발생하고있다. 나는 "끝"무엇을 얻을지 모르겠다. – mattgcon

1

ActiveDocument.Range 끝에 삽입하려면 rngDoc을 설정해야합니다. 다음은이 작업을 수행하는 C#으로 이식하기 쉬운 VBA입니다. 이 삽입처럼

Private Sub InsertNewPageAtEndofDoc(app As Word.Application) 
     Dim rng As Word.Range 
     Dim adRange As Word.Range 
     adRange = app.ActiveDocument.Range 
     rng = app.ActiveDocument.Range(adRange.Start, adRange.End) 
     rng.Collapse(Word.WdCollapseDirection.wdCollapseEnd) 
     rng.InsertBreak(Word.WdBreakType.wdPageBreak) 
     rng.Collapse(Word.WdCollapseDirection.wdCollapseEnd) 
End Sub 
1

나는 Todds가 접근하지만 vb.net에 사용됩니다.