gpt4 book ai didi

c# - Office Interop 读取不正确的单元格值

转载 作者:太空宇宙 更新时间:2023-11-03 12:58:26 25 4
gpt4 key购买 nike

尝试遍历 Excel 电子表格中的行和单元格,删除空行和单元格。我正在使用以下例程来执行此操作。

foreach(Range row in sheet.UsedRange.Rows)
{
for (int i = 0; i < row.Columns.Count; i++)
{
Range cell = row.Cells[1, i + 1];
if (cell.Value == null || String.IsNullOrEmpty(cell.Value.ToString()))
{
cell.Delete();
}
}
}

前两行效果很好。然而,它随后似乎失控了。

第三行完全是空的。然而,当它遍历列时,当此循环到达“I”列时,它会在那里读取一个值。该值是第 4 行“J”列中的实际值。

在那之后,它变得更糟,丢失整行并从它找到的行中读取不正确的值。

我对此感到困惑。有什么明显的我错过了吗?

最佳答案

是的,您遗漏了一些非常明显的东西。您正在删除单元格。在该操作之后,您对选择哪个单元格的计算不再起作用。

如果删除一个单元格,所有其他单元格将向上移动。这会导致您的 row.Cells[1, i + 1] 不正确。例如,如果您删除第 2 行中的一个单元格,则永远不会检查第 3 行中同一列中的单元格的值,因为它在第 2 行中。

删除时的移动方向也可能是一个因素 - 您可以通过将参数传递给 Delete 函数来控制它。

删除一列时只需重新检查同一列:

foreach (Range row in Globals.ThisAddIn.Application.ActiveWorkbook.ActiveSheet.UsedRange.Rows)
{
for (int i = 0; i < row.Columns.Count; i++)
{
Range cel = row.Cells[1, i + 1];
if (cel.Value == null || String.IsNullOrEmpty(cel.Value.ToString()))
{
// default shift is up
cel.Delete();
// to shift left use cel.Delete(XlDeleteShiftDirection.xlShiftToLeft);
i--; // this will do
}
}
}

关于c# - Office Interop 读取不正确的单元格值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33146419/

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