Pregunta

Estoy desarrollando un complemento de Excel 2007 usando Visual Studio Tools para Office (2008).Tengo una hoja con varios ListObjects, que están vinculados a tablas de datos al inicio.Cuando están encuadernados, se ajustan automáticamente al tamaño correcto.

El problema viene cuando se reencuadernan.Tengo un botón personalizado en la barra de la cinta que regresa a la base de datos y recupera información diferente según algunos criterios que ingresa el usuario.Estos nuevos datos regresan y se vuelven a vincular a ListObjects; sin embargo, esta vez no se cambia su tamaño y obtengo una excepción:

ListObject no puede estar obligado porque no se puede cambiar el tamaño para que se ajuste a los datos.El ListObject no pudo agregar nuevas filas.Esto puede ser causado por la incapacidad de mover objetos a continuación del objeto de lista.

Excepción interna:"Error en el método de inserción de la clase Range"
Razón:Microsoft.Office.Tools.Excel.FailureReason.CouldNotResizeListObject

No pude encontrar nada muy significativo sobre este error en Google o MSDN.He estado tratando de resolver esto por un tiempo, pero fue en vano.

Estructura de código básica:

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

Tenga en cuenta que esta excepción ocurre incluso cuando ListObject se reduce, y no solo cuando crece.

¿Fue útil?

Solución

Si alguien más tiene este problema, encontré la causa de esta excepción.ListObjects cambiará de tamaño automáticamente al encuadernarse, siempre que no afecten a ningún otro objeto de la hoja.Tenga en cuenta que ListObjects solo puede afectar los rangos que rodean.

En mi caso, el objeto de lista que estaba encima del otro tenía menos columnas que el que estaba debajo.Digamos que el ListObject superior tenía 2 columnas y el ListObject inferior tenía 3 columnas.Cuando el ListObject superior cambió su número de filas, no tuvo la capacidad de realizar ningún cambio en la tercera columna ya que no estaba en su Rango subyacente.Esto significa que no pudo mover ninguna celda en la tercera columna, por lo que el segundo ListObject no pudo moverse correctamente, lo que resultó en mi excepción anterior.

Cambiar las posiciones de ListObjects para colocar el más ancho encima del más pequeño funciona bien.Siguiendo la lógica anterior, esto ahora significa que el ListObject más amplio puede desplazar todas las columnas del segundo ListObject y, dado que no hay nada debajo del más pequeño, también puede desplazar las celdas necesarias.La razón por la que no tuve ningún problema en el enlace inicial es que ambos ListObjects eran una sola celda.

Dado que esto no es óptimo en mi caso, probablemente usaré columnas vacías o intentaré jugar con columnas invisibles si es posible, pero al menos la causa ahora está clara.

Otros consejos

Tengo un problema similar al actualizar varios objetos de lista.Estamos configurando cada listObject.DataSource = null, luego volvemos a vincular comenzando en el listobject inferior y avanzando hacia arriba en lugar de de arriba hacia abajo.

Sólo una idea de algo para probar a ver si te da más información:Intente cambiar el tamaño del objeto de la lista antes de la línea de excepción y vea si eso también genera una excepción.De lo contrario, intente cambiar el tamaño del objeto de rango al nuevo tamaño de DataTable.

Dices que esto sucede cuando ListObject se reduce y crece.¿Ocurre también si ListObject sigue siendo del mismo tamaño?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top