COM을 통해 Excel 2003 워크시트의 모든 페이지 나누기를 반복하는 방법

StackOverflow https://stackoverflow.com/questions/78053

문제

COM을 통해 특정 Excel 2003 워크시트의 모든 페이지 나누기 위치를 검색하려고 했습니다.내가 하려는 일의 예는 다음과 같습니다.

Excel::HPageBreaksPtr pHPageBreaks = pSheet->GetHPageBreaks();
long count = pHPageBreaks->Count;
for (long i=0; i < count; ++i)
{
  Excel::HPageBreakPtr pHPageBreak = pHPageBreaks->GetItem(i+1); 
  Excel::RangePtr pLocation = pHPageBreak->GetLocation();

  printf("Page break at row %d\n", pLocation->Row);

  pLocation.Release();
  pHPageBreak.Release();
}
pHPageBreaks.Release();

나는 이것이 각 가로 페이지 나누기의 행 번호를 인쇄할 것으로 예상합니다. pSheet.내가 겪고 있는 문제는 비록 count 워크시트의 페이지 나누기 수를 올바르게 나타내면 첫 번째 페이지 나누기만 검색할 수 있는 것 같습니다.루프를 통한 두 번째 실행에서 다음을 호출합니다. pHPageBreaks->GetItem(i) 오류 번호 0x8002000b, "잘못된 인덱스"와 함께 예외가 발생합니다.

사용을 시도하는 중 pHPageBreaks->Get_NewEnum() 컬렉션을 반복하기 위한 열거자를 가져오는 것도 동일한 오류로 인해 실패합니다. Get_NewEnum().

해결책을 찾아보았으며 지금까지 찾은 가장 가까운 것은 다음과 같습니다. http://support.microsoft.com/kb/210663/en-us.인쇄할 범위 바로 너머의 셀과 오른쪽 하단 셀(IV65536)을 포함하여 페이지 나누기 너머의 다양한 셀을 활성화해 보았지만 도움이 되지 않았습니다.

누군가 Excel에서 시트의 모든 페이지 나누기 위치를 반환하도록 하는 방법을 알려줄 수 있다면 정말 좋을 것입니다!

감사합니다.

@조엘:예, 사용자 인터페이스를 표시한 다음 설정을 시도했습니다. ScreenUpdating 사실 - 동일한 결과가 나왔습니다.또한 이후 설정 조합을 시도했습니다. pSheet->PrintArea 전체 워크시트 및/또는 호출 pSheet->ResetAllPageBreaks() 내가 전화해서 받기 전에 HPageBreaks 컬렉션도 도움이 되지 않았습니다.

@조엘:나는 사용했다 pSheet->UsedRange 스크롤할 행을 결정하면 Excel이 모든 가로 나누기를 지나 스크롤되지만 두 번째 줄에 액세스하려고 하면 여전히 동일한 문제가 발생합니다.불행하게도 Excel 2007로 전환해도 도움이 되지 않았습니다.

도움이 되었습니까?

해결책

Visual Basic에서 Excel 2007을 실험하면서 페이지 나누기가 화면에 한 번 이상 표시되지 않으면 알 수 없다는 것을 발견했습니다.

내가 찾을 수 있는 가장 좋은 해결 방법은 시트 상단에서 데이터가 포함된 마지막 행까지 페이지를 아래로 내리는 것이었습니다.그런 다음 모든 페이지 나누기를 열거할 수 있습니다.

VBA 코드는 다음과 같습니다.이것을 COM으로 변환하는 데 문제가 있으면 알려주십시오.

Range("A1").Select
numRows = Range("A1").End(xlDown).Row

While ActiveWindow.ScrollRow < numRows
    ActiveWindow.LargeScroll Down:=1
Wend

For Each x In ActiveSheet.HPageBreaks
    Debug.Print x.Location.Row
Next

이 코드는 한 가지 단순화된 가정을 만들었습니다.

  • 데이터가 얼마나 멀리 가는지 파악하기 위해 .End(xlDown) 메서드를 사용했습니다.이는 A1부터 시트 하단까지 연속적인 데이터가 있다고 가정합니다.그렇지 않은 경우 다른 방법을 사용하여 계속 스크롤할 거리를 알아내야 합니다.

다른 팁

KB 문서에 언급된 대로 ScreenUpdating을 True로 설정하셨나요?

화면을 강제로 다시 그리기 위해 실제로 True로 전환할 수도 있습니다.페이지 나누기 계산은 Excel에서 요청 시 수행하는 작업이 아니라 실제로 페이지를 렌더링하는 데 따른 부작용인 것처럼 들리므로 화면에서 페이지 렌더링을 트리거해야 합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top