我一直在嘗試通過COM檢索給定Excel 2003工作表上的所有分頁符的位置。以下是我正在試圖做那種事的例子:如何迭代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返回工作表中所有分頁符的位置,那就太棒了!
謝謝。
@Joel:是的,我試圖顯示用戶界面,然後設置ScreenUpdating
爲true - 它產生了相同的結果。此外,我自從嘗試將pSheet->PrintArea
設置爲整個工作表的組合並且/或在打電話之前致電pSheet->ResetAllPageBreaks()
以獲得HPageBreaks
集合,這也沒有幫助。
@Joel:我已經使用pSheet->UsedRange
來確定要滾動過去的行,並且Excel會滾過所有水平分隔符,但是當我嘗試訪問第二個分隔符時,我仍然遇到同樣的問題。不幸的是,切換到Excel 2007也沒有幫助。
除了這樣做,我發現Application.ActiveWindow.View需要設置爲xlNormalView(而不是xlPageBreakPreview)我仍然得到相同的8002000b錯誤,除非我已將視圖設置爲xlNormalView。 感謝您的幫助! – Martin 2008-09-17 20:30:41