Office互操作读取不正确的单元格值
本文关键字:单元格 不正确 互操作 读取 Office | 更新日期: 2023-09-27 18:17:45
尝试遍历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
}
}
}