【问题标题】:Unable to delete empty rows from Excel file using c#无法使用c#从Excel文件中删除空行
【发布时间】:2019-08-30 22:48:19
【问题描述】:

我正在尝试从我的 Excel 中删除空行。

我已经尝试查看其他示例,甚至尝试实现但它不起作用。我需要做的是删除整行如果该行的第一个单元格为空。

这是我尝试过的:

读取Excel.cs:

Excel.Application excelApp = new Excel.Application();
Excel.Workbook workbook = excelApp.Workbooks.Open(fileLocation)
Excel.Worksheet worksheet = (Excel.Worksheet)workbook.ActiveSheet;
Excel.Range usedRange = worksheet.UsedRange;
int rowCount = worksheet.UsedRange.Rows.Count;
int colCount = worksheet.UsedRange.Columns.Count;

        for (int i = 1; i <= rowCount; i++)
        {
      if (usedRange.Cells[1, 1] == null)
             {
                // Delete entire row if first cell is empty
                usedRange.Cells[1, 1]).EntireRow.Delete(null);
            }

            workbook.Save();
        }

我面临的问题是它不断循环遍历excel并且即使单元格为空也不遵循if条件

【问题讨论】:

  • usedRange.Cells[1, 1] (2 次出现) 在这里,您似乎应该使用 i 变量而不是 1 之一,否则您将始终测试行和列索引 1 而不是检查每一行。
  • 另外,我不确定excel中的索引是基于0还是基于1。但在 C# 中,数组的第一个元素是索引 0。
  • 嗨@Pac0 感谢您指出这一点,已更正!不过还是不行..

标签: c# asp.net office-interop


【解决方案1】:

首先,您的代码总是删除第 1 行。您应该遍历所有行。其次,无论何时删除始终从末尾开始并移至开头,否则您可能会错过行。问题是如果您删除第 4 行,则第 5 行变为第 4 行,而您跳过第 5 行。请参见下面的代码

        for (int i = rowCount - 1; i >= 1; i--)
        {
             if (usedRange.Cells[i, 1] == null)
             {
                // Delete entire row if first cell is empty
                usedRange.Cells[i, 1]).EntireRow.Delete(null);
             }

        }
        workbook.Save();

【讨论】:

  • 嗨@jdweng,感谢您的回答。我试过这个,但是当我调试时我注意到根据条件如果单元格是空的,它应该点击代码“usedRange.Cells[i, 1]).EntireRow.Delete(null);”但它没有,从 if(usedRange.Cells[i, 1] == null),它直接跳转到 workbook.Save() :-(
  • 我认为你不需要 usedRange。只需检查单元格就可以了。我也刚刚注意到 i >= 0 应该是 i >= 1,因为 excel 中的行和列从 1 开始。
  • 而不是usedRange.Cells[i, 1] == null,我用worksheet.Cells[i, 1] == null,我也改成i>=1,还是不行删除,它根本不执行这一行 usedRange.Cells[i, 1]).EntireRow.Delete(null);..我做错了什么?
  • 与您所做的相同修复:worksheet.Cells[i, 1].EntireRow.Delete;不确定 (null) 在做什么。我怀疑它是用 null 代替该行而不是删除。
  • Value2 比 Text.ToString() 更高效
【解决方案2】:

终于成功了:

        Excel.Application excelApp = new Excel.Application();
        Excel.Workbook workbook = excelApp.Workbooks.Open(fileLocation, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
        Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];
        Excel.Range usedRange = worksheet.UsedRange;
        int rowCount = usedRange.Rows.Count;
        int colCount = usedRange.Columns.Count;

        for (int i = rowCount; i >= 1; i--)
        {
            if (string.IsNullOrEmpty((worksheet.Cells[i, 1]).Text.ToString()))
            {
                // Delete entire row if first cell is empty
                (worksheet.Cells[i, 1]).EntireRow.Delete();
            }

}
        workbook.Save();

【讨论】:

    猜你喜欢
    • 2013-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-07
    相关资源
    最近更新 更多