尝试遍历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
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句