我一直在尝试通过 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 返回工作表中所有分页符的位置,那就太棒了!
谢谢你。
@Joel:是的,我尝试过显示用户界面,然后设置ScreenUpdating
为 true - 它产生了相同的结果。此外,我已经尝试将设置组合pSheet->PrintArea
到整个工作表和/或pSheet->ResetAllPageBreaks()
在我调用之前调用以获取HPageBreaks
集合,这也没有帮助。
@Joel:我习惯于pSheet->UsedRange
确定要滚动过去的行,而 Excel 确实会滚动过去所有水平中断,但是当我尝试访问第二个中断时,我仍然遇到同样的问题。不幸的是,切换到 Excel 2007 也无济于事。