Я пытался получить расположение всех разрывов страниц на данном листе Excel 2003 через COM. Вот пример того, что я пытаюсь сделать:
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
значение true - это дало те же результаты. Кроме того, с тех пор я попробовал комбинации установки pSheet->PrintArea
на весь лист и / или вызова pSheet->ResetAllPageBreaks()
перед моим вызовом, чтобы получить коллекцию HPageBreaks
, что тоже не помогло.
@ Джоэл: я использовал pSheet->UsedRange
, чтобы определить строку, которую нужно прокрутить, а Excel прокручивает все горизонтальные разрывы, но у меня все еще остается та же проблема, когда я пытаюсь получить доступ ко второму. К сожалению, переход на Excel 2007 также не помог.