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”列中的实际值。

之后,情况变得更糟,丢失了整行,并从确实找到的行中读取了不正确的值。

我对此感到困惑。有什么明显的我想念的吗?

帕特里克·霍夫曼

是的,您缺少非常明显的东西。您正在删除单元格。完成该操作后,您对选择哪个单元格的计算将不再起作用。

如果删除一个单元格,则所有其他单元格将向上移动。这会导致您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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

单元格值不正确

C#阅读使用的Microsoft.Office.Interop.Excel Excel单元格的值

使用Microsoft.Office.Interop.Word查找所选单元格的索引

Microsoft.Office.Interop.Excel添加单元格非常慢

使用OLEDB读取Excel,某些单元格读取不正确

Office.context.mailbox.diagnostics.hostName 为 Mac 上的 Outlook 返回不正确的值

Div宽度在Office Outlook Client中不正确

System.Runtime.InteropServices.InvalidComObjectException:尝试使用 Microsoft.Office.Interop.Excel 写入 Excel 单元格时

Office 2007的Microsoft.Office.Interop.Excel

Excel公式仅显示公式,而不显示Office 2010中单元格中的值

在Office.js Excel中获取选定单元格的值和地址

使用Office js Excel API无法在Excel中加载超过12000行的单元格值

在PowerPoint(Office 365)VBA中更改单元格值的代码

Epplus 是否支持通过 office open xml 设置工作表数据/单元格值?

抛出异常-报废:哪个单元格包含不正确的值

Excel Precedents.Count在单元格公式内返回不正确的值

Office Web API-单元格激活

使用 office.js 合并 Excel 单元格

UITableView 单元格显示不正确

表单元格计算不正确

滚动时单元格显示不正确

TableView显示单元格不正确

集合视图中单元格的宽度不正确

UITableView单元格删除不正确

UICollectionView 单元格显示不正确

从 Office.Interop.Outlook 迁移

浏览文件时不正确的Office 365日期修改格式

执行时,PlayonLinux上的Microsoft Office 2010图标不正确

如何强制将单元格中的所有文本放到Libre Office / Open Office的下一页上?