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
が正しくワークシート内のページ区切りの数を示しているにもかかわらず、私は最初のページだけを取り出すように見えることがあるということです。ループを2回目に実行したときに、pHPageBreaks->GetItem(i)
を呼び出すと、エラー番号0x8002000bの "無効なインデックス"がスローされます。
Get_NewEnum()
の呼び出しで、pHPageBreaks->Get_NewEnum()
を使用して列挙子がコレクションに対して反復処理を実行しようとしても、同じエラーで失敗します。
解決策を探しましたが、これまでに見つかったことのうち最も近いものはhttp://support.microsoft.com/kb/210663/en-usです。印刷する範囲を超えたセルや右下のセル(IV65536)など、ページ区切りを超えてさまざまなセルをアクティブにしようとしましたが、それは役に立ちませんでした。
Excelでページ区切りのすべての場所を返す方法を教えていただけたら、それはすばらしいことでしょう。
ありがとうございます。
@Joel:はい、私はユーザーインターフェイスを表示しようとしましたが、ScreenUpdating
をtrueに設定しようとしました - 同じ結果が出ました。また、ワークシート全体にpSheet->PrintArea
を設定したり、HPageBreaks
コレクションを取得する前にpSheet->ResetAllPageBreaks()
を呼び出すと、どちらの方法も役に立たなかった組み合わせを試してみました。
@Joel:私はpSheet->UsedRange
を使用して過去のスクロール行を特定し、Excelはすべての水平ブレイクをスクロールしますが、2番目のスクロールにアクセスしようとすると同じ問題が発生します。残念なことにExcel 2007に切り替えることは役に立たなかった。
これに加えて、Application.ActiveWindow.ViewをxlPageBreakPreviewではなくxlNormalViewに設定する必要があります。xlNormalViewに設定されているビューを持たない限り、同じ8002000bエラーが発生します。 助けてくれてありがとう! – Martin