7

Visual Studio Tools for Office (2008) を使用して Excel 2007 アドインを開発しています。起動時にデータテーブルにバインドされているいくつかの ListObjects を含む 1 つのシートがあります。それらがバインドされると、正しく自動サイズ調整されます。

問題は、それらが再バインドされたときに発生します。リボン バーにカスタム ボタンがあり、データベースに戻り、ユーザーが入力した条件に基づいてさまざまな情報を取得します。この新しいデータが返され、ListObjects に再バインドされますが、今回はサイズが変更されず、例外が発生します。

データに合わせてサイズを変更できないため、ListObject をバインドできません。ListObject は新しい行を追加できませんでした。これは、リスト オブジェクトの下にオブジェクトを移動できないことが原因である可能性があります。

内部例外:「Range クラスの挿入メソッドが失敗しました」
理由: Microsoft.Office.Tools.Excel.FailureReason.CouldNotResizeListObject

Google または MSDN で、このエラーについて非常に意味のあるものを見つけることができませんでした。私はしばらくこれを理解しようとしてきましたが、役に立ちませんでした。

基本的なコード構造:

//at startup
DataTable tbl = //get from database
listObj1.SetDataBinding(tbl);
DataTable tbl2 = //get from database
listObj2.SetDataBinding(tbl2);  

//in buttonClick event handler
DataTable tbl = //get different info from database
//have tried with and without unbinding old source
listObj1.SetDataBinding(tbl);              <-- exception here
DataTable tbl2 = //get different info from database
listObj2.SetDataBinding(tbl2);

この例外は、ListObject が大きくなったときだけでなく、縮小しているときにも発生することに注意してください。

4

3 に答える 3

4

他の誰かがこの問題を抱えている場合、私はこの例外の原因を見つけました。ListObjectsは、シート上の他のオブジェクトに影響を与えない限り、バインド時に自動的にサイズが変更されます。ListObjectsは、ラップアラウンドする範囲にのみ影響を与える可能性があることに注意してください。

私の場合、他のオブジェクトの上にあるリストオブジェクトは、その下にあるものよりも列が少なかった。上のListObjectに2つの列があり、下のListObjectに3つの列があるとします。一番上のListObjectが行数を変更したとき、その基になるRangeになかったため、3番目の列に変更を加えることはできませんでした。これは、3番目の列のセルをシフトできなかったため、2番目のListObjectを適切に移動できなかったことを意味し、上記の例外が発生しました。

ListObjectsの位置を変更して、幅の広いものを小さい方の上に配置すると、問題なく機能します。上記のロジックに従うと、これは、幅の広いListObjectが2番目のListObjectのすべての列をシフトできることを意味し、小さい列の下には何もないため、必要なセルもシフトできます。最初のバインドで問題が発生しなかった理由は、両方のListObjectが単一のセルであったためです。

私の場合、これは最適ではないので、可能であれば空の列を使用するか、非表示の列を試してみますが、少なくとも原因は明らかです。

于 2008-08-25T19:30:44.243 に答える
1

複数のリストオブジェクトをリフレッシュすると、同様の問題が発生します。各 listObject.DataSource = null を設定してから、一番下の listobject から始めて再バインドし、トップダウンではなく上に向かって作業します。

于 2009-03-18T16:33:36.650 に答える
0

より多くの情報が得られるかどうかを確認するためのアイデア:例外行の前にリストオブジェクトのサイズを変更して、それでも例外がスローされるかどうかを確認してください。そうでない場合は、範囲オブジェクトのサイズをDataTableの新しいサイズに変更してみてください。

これは、ListObjectが縮小および拡大したときに発生すると言います。ListObjectが同じサイズのままの場合にも発生しますか?

于 2008-08-22T23:27:01.360 に答える