gpt4 book ai didi

c# - .NET - Excel ListObject 在数据绑定(bind)时自动调整大小

转载 作者:太空狗 更新时间:2023-10-29 20:29:43 25 4
gpt4 key购买 nike

我正在使用 Visual Studio Tools for Office (2008) 开发 Excel 2007 加载项。我有一张上面有几个 ListObjects 的工作表,它们在启动时被绑定(bind)到数据表。当它们被绑定(bind)时,它们会正确地自动调整大小。

当他们重新绑定(bind)时,问题就来了。我在功能区栏上有一个自定义按钮,它返回到数据库并根据用户输入的某些条件检索不同的信息。这个新数据返回并重新绑定(bind)到 ListObjects - 但是,这次它们没有调整大小,我得到一个异常:

ListObject cannot be bound because it cannot be resized to fit the data. The ListObject failed to add new rows. This can be caused because of inability to move objects below of the list object.

Inner exception: "Insert method of Range class failed"
Reason: 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 正在收缩时也会发生此异常,而不仅仅是在它增长时。

最佳答案

如果其他人遇到这个问题,我已经找到了这个异常的原因。 ListObjects 将在绑定(bind)时自动调整大小,只要它们不影响工作表上的任何其他对象。请记住,ListObjects 只能影响它们环绕的范围。

在我的例子中,位于另一个之上的列表对象的列少于其下方的列。假设顶部的 ListObject 有 2 列,底部的 ListObject 有 3 列。当顶部 ListObject 更改其行数时,它无法对第三列进行任何更改,因为它不在其基础范围内。这意味着它无法移动第三列中的任何单元格,因此无法正确移动第二个 ListObject,从而导致上述异常。

更改 ListObjects 的位置以将较宽的放置在较小的上方效果很好。按照上面的逻辑,现在这意味着较宽的 ListObject 可以移动第二个 ListObject 的所有列,并且由于较小的下面没有任何内容,它也可以移动任何必要的单元格。我在初始绑定(bind)时没有遇到任何问题的原因是两个 ListObjects 都是一个单元格。

由于这在我的情况下不是最佳选择,我可能会使用空列或尝试使用不可见的列(如果可能),但至少原因现在很清楚。

关于c# - .NET - Excel ListObject 在数据绑定(bind)时自动调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com