C# Office互操作读取不正确的单元格值
尝试迭代excel电子表格上的行和单元格,删除空的行和单元格。我正在使用下面的例程来执行此操作C# Office互操作读取不正确的单元格值,c#,excel,office-interop,excel-interop,C#,Excel,Office Interop,Excel 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(cel
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();
}
}
}
foreach(sheet.UsedRange.Rows中的范围行)
{
对于(int i=0;i
对于前两行来说,这很好。然而,这似乎就失控了
第三排完全是空的。然而,当它遍历列时,当这个循环到达列“I”时,它在那里读取一个值。该值实际上是第4行“J”列中的值
之后,情况会变得更糟,丢失整行,并从找到的行中读取不正确的值
我对此感到困惑。有什么明显的东西我遗漏了吗?是的,你遗漏了一些非常明显的东西。您正在删除单元格。在该操作之后,要拾取的单元格的计算将不再有效 如果删除一个单元格,所有其他单元格都将上移。这会导致您的
行.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
}
}
}
foreach(Globals.ThisAddIn.Application.ActiveWorkbook.ActiveSheet.UsedRange.Rows中的范围行)
{
对于(int i=0;i
你能确切地解释一下你想做什么吗?如果要检查该行,请先检查该行,然后删除所有单元格。(仍然需要执行i--
然后)我只是尝试从电子表格中删除空单元格。我想关键在于你的答案,你的意思是当单元格被删除时,自动选择的移位是“向上”。我需要它是“左”。我看到delete方法有一个paramater,它有望解决问题。@patrickhoffman是的,这是关键。我将编辑您的答案以包含它,然后接受它。谢谢你的帮助。