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
、ワークシートの改ページの数を正しく示しているにもかかわらず、最初の改ページしか取得できないように見えることです。ループの 2 回目の実行で、呼び出しによって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 はすべての水平方向の区切りを超えてスクロールしますが、2 番目の区切りにアクセスしようとすると、まだ同じ問題が発生します。残念ながら、Excel 2007 に切り替えても効果はありませんでした。