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

尝试遍历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”列中。

之后,它变得越来越糟糕,缺less整行,并从它find的行读取不正确的值。

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

是的,你错过了一些非常明显的东西。 您正在删除单元格。 在那个操作之后,你select哪个单元的计算不再有效。

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

删除的方向也可能是一个因素 – 您可以通过传递一个参数到删除function来控制它。

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

 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 } } }