Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当行计数=1时,Resize()使dataodyrange为空_C#_Excel - Fatal编程技术网

C# 当行计数=1时,Resize()使dataodyrange为空

C# 当行计数=1时,Resize()使dataodyrange为空,c#,excel,C#,Excel,我正在尝试重置Excel ListObject中的列数。我知道可以逐个添加和删除列,但我希望避免不必要的循环。相反,我决定使用resize方法调整ListObject的大小 下面是我正在使用的代码(其中OutputCasesTable是ListObject): 上面的代码行似乎工作得很好,但是如果ListObject仅包含1行数据,则ListObject的DataodyRange在第二行变为null-当我尝试更改其单元格值时,会产生错误。excel中的行似乎仍然存在 MSDN文档说明如下: “标

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

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

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

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

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

我知道有很多方法可以完成这项任务,但我想了解为什么会发生这种情况

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

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;
就我个人而言,我更喜欢看第一个解决方案

我能做些什么让它在空字符串中工作吗?或者你有更好的解决方案吗


最重要的是,

调整大小操作是杀死
dataodyrange
的一部分,显然
调整大小
使用了一些内部逻辑,“如果只有一行,所有单元格都是空的,请删除所有数据行。如果有多行,请不要删除任何数据行”

我同意这种逻辑有点混乱。如果您的问题是Microsoft为什么要以这种方式实现它,我会说,尽管它不一致,但在某种程度上可能更整洁-模型似乎认为您使用的是一个空表,并且模型无法以图形方式区分差异(表不可能只有一个标题行)

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

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

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