Domanda

Sto sviluppando un componente aggiuntivo di Excel 2007 utilizzando Visual Studio Tools per Office (2008).Ho un foglio con diversi ListObjects, che vengono associati ai datatable all'avvio.Una volta rilegati, si ridimensionano automaticamente correttamente.

Il problema arriva quando vengono rilegati.Ho un pulsante personalizzato sulla barra multifunzione che torna al database e recupera informazioni diverse in base ad alcuni criteri immessi dall'utente.Questi nuovi dati ritornano e vengono ricollegati a ListObjects, tuttavia, questa volta non vengono ridimensionati e ottengo un'eccezione:

ListObject non può essere vincolato perché non può essere ridimensionato per adattarsi ai dati.ListObject non è riuscito ad aggiungere nuove righe.Questo può essere causato a causa dell'incapacità di spostare gli oggetti sottostanti dell'oggetto elenco.

Eccezione interna:"Metodo di inserimento della classe Range non riuscito"
Motivo:Microsoft.Office.Tools.Excel.FailureReason.CouldNotResizeListObject

Non sono riuscito a trovare nulla di molto significativo su questo errore su Google o MSDN.È da un po' che cerco di capirlo, ma senza successo.

Struttura del codice di base:

//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);

Tieni presente che questa eccezione si verifica anche quando ListObject si restringe e non solo quando cresce.

È stato utile?

Soluzione

Se qualcun altro sta riscontrando questo problema, ho trovato la causa di questa eccezione.ListObjects verrà ridimensionato automaticamente durante la rilegatura, purché non influenzi altri oggetti sul foglio.Tieni presente che ListObjects può influenzare solo gli intervalli che avvolgono.

Nel mio caso, l'oggetto elenco che era sopra l'altro aveva meno colonne di quello sottostante.Diciamo che il ListObject superiore aveva 2 colonne e il ListObject inferiore aveva 3 colonne.Quando il ListObject in alto ha cambiato il numero di righe, non ha avuto la possibilità di apportare modifiche alla terza colonna poiché non era nell'intervallo sottostante.Ciò significa che non è stato possibile spostare alcuna cella nella terza colonna e quindi il secondo ListObject non può essere spostato correttamente, risultando nella mia eccezione sopra.

Cambiare le posizioni dei ListObjects per posizionare quello più largo sopra quello più piccolo funziona bene.Seguendo la logica di cui sopra, ciò ora significa che il ListObject più ampio può spostare tutte le colonne del secondo ListObject e poiché non c'è nulla sotto quello più piccolo può anche spostare tutte le celle necessarie.Il motivo per cui non ho riscontrato problemi con l'associazione iniziale è che entrambi i ListObject erano una singola cella.

Poiché nel mio caso questo non è ottimale, probabilmente utilizzerò colonne vuote o proverò a giocare con colonne invisibili, se possibile, ma almeno la causa ora è chiara.

Altri suggerimenti

Ho un problema simile con l'aggiornamento di più oggetti elenco.Stiamo impostando ogni listObject.DataSource = null, quindi riassociando partendo dal listobject in basso e procedendo verso l'alto invece che dall'alto verso il basso.

Solo un'idea di qualcosa da provare per vedere se ti dà maggiori informazioni:Prova a ridimensionare l'oggetto elenco prima della riga di eccezione e verifica se anche questo genera un'eccezione.In caso contrario, prova a ridimensionare l'oggetto intervallo alla nuova dimensione di DataTable.

Dici che questo accade quando ListObject si restringe e cresce.Succede anche se ListObject rimane della stessa dimensione?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top