gpt4 book ai didi

c# - 当行数 == 1 时,ListObject.Resize() 使 DataBodyRange 为空

转载 作者:行者123 更新时间:2023-11-30 16:58:44 25 4
gpt4 key购买 nike

我正在尝试重置 Excel ListObject 中的列数。我知道您可以逐一添加和删除列,但我想避免不必要的循环。相反,我决定使用 Resize 方法调整 ListObject 的大小。

这是我正在使用的代码(其中 OutputCasesTable 是 ListObject):

OutputCasesTable.DataBodyRange.Value2 = "";
OutputCasesTable.Resize(OutputCasesTable.Range.Resize[ColumnSize: CaseCount]);
OutputCasesTable.DataBodyRange.Value2 = OutputCasesAray;

上面的代码行似乎运行良好,但是如果 ListObject 仅包含 1 行数据,则 ListObject 的 DataBodyRange 在第二行变为 null - 当我尝试更改其单元格的值时产生错误。 Excel 中的行似乎仍然存在。

MSDN 文档说明如下:“标题必须保留在同一行中,结果列表必须与原始列表重叠。列表必须包含标题行和至少一行数据。”

现在我明白了“一行数据”意味着该行包含值——所以这里的错误原因一定是DataBodyRange单元格都没有值(“”)。但是,有两个数据行包含“”的表格仍然没有包含数据的行,是吗?

我知道有很多方法可以完成这项任务,但我想了解为什么会这样。

临时解决方案:替换了代码以仅将值设置为将被删除的列中的空字符串(新列计数以上的列)。所有其他列将被替换:

if(OutputCasesTable.ListColumns.Count - CaseCount > 0) 
OutputCasesTable.DataBodyRange.Offset[ColumnOffset: CaseCount].Resize[ColumnSize: OutputCasesTable.ListColumns.Count - CaseCount].Value2 = "";
OutputCasesTable.Resize(OutputCasesTable.Range.Resize[ColumnSize: CaseCount]);
OutputCasesTable.DataBodyRange.Value2 = OutputCasesAray;

我个人更喜欢看第一个解决方案!

有什么我可以做的让它可以处理空字符串吗?或者您有更好的解决方案吗?

最好的问候,

最佳答案

Resize 操作是杀死 DataBodyRange 的部分,显然 Resize 使用了一些内部逻辑,沿着“如果只有一行,并且所有单元格都是空的,则删除所有数据行。如果有多行,则不删除任何行。

我同意这个逻辑有点令人困惑。如果你的问题是微软为什么要这样实现它,我会争辩说,虽然它不一致,但它在某种程度上可能更整洁——在模型看来你正在使用一个空表,而且模型没有办法以图形方式区分差异(表格不可能只有标题行)。

Resize 出现并找到一个单行空白表时,它无法判断您有一个零行表还是一个包含空字符串的单行表。如果它到达并找到两个空行,那是明确的(它们必须是有意义的行)。

对于您问题的变通方法部分,我建议采用更简洁的解决方案,即只检查 ListRows.Count 属性,并在必要时添加一个。请注意,您也可以使用 Clear 而不是将 Value2 设置为空白;对我来说,它读起来更不言自明。

OutputCasesTable.DataBodyRange.Clear();
OutputCasesTable.Resize(OutputCasesTable.Range.Resize[ColumnSize: CaseCount]);
if (OutputCasesTable.ListRows.Count == 0) OutputCasesTable.ListRows.Add();
OutputCasesTable.DataBodyRange.Value2 = OutputCasesAray;

关于c# - 当行数 == 1 时,ListObject.Resize() 使 DataBodyRange 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24867276/

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