COM을 통해 Excel 2003 워크시트의 모든 페이지 나누기를 반복하는 방법
문제
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에서 요청 시 수행하는 작업이 아니라 실제로 페이지를 렌더링하는 데 따른 부작용인 것처럼 들리므로 화면에서 페이지 렌더링을 트리거해야 합니다.