C# 删除 Excel 工作表中的空白行和空白列

在日常处理 Excel 数据时,经常会遇到表格中夹杂着许多空白行或空白列。这些空白内容不仅影响数据的整洁性,还可能导致数据处理和分析结果出错。

手动逐一删除这些空白行列不仅效率低下,而且容易遗漏。本文将介绍如何使用 Spire.XLS for .NET 在 C# 中自动删除 Excel 工作表的空白行和空白列,并详细解释实现原理。


环境准备

推荐通过 NuGet 安装 Spire.XLS:

Install-Package Spire.XLS

安装完成后,在代码文件中引入命名空间:

using Spire.Xls;

删除空白行

实现原理

在 Excel 中,一行可能包含多个单元格。如果该行的所有单元格都为空(即既没有文本,也没有公式或值),我们就认为该行是“空行”。

为了安全删除,需要注意两点:

  1. 逐行检查:遍历该行的所有列,判断是否存在非空单元格。
  2. 倒序遍历:如果从上到下依次删除行,会导致行索引发生变化,容易跳过或报错。因此必须从最后一行开始向上遍历。

示例代码

// 删除空白行
for (int i = sheet.LastRow; i >= 1; i--)
{
    bool isEmptyRow = true;

    // 遍历该行的所有列
    for (int j = 1; j <= sheet.LastColumn; j++)
    {
        // 判断单元格是否有内容
        if (!string.IsNullOrWhiteSpace(sheet.Range[i, j].Text))
        {
            isEmptyRow = false;
            break;
        }
    }

    // 如果整行为空,则删除该行
    if (isEmptyRow)
    {
        sheet.DeleteRow(i);
    }
}

细节说明

  • sheet.LastRow 返回工作表中最后一个非空单元格所在的行号,这样可以避免无意义地遍历整个 1048576 行。
  • sheet.Range[i, j].Text 会返回单元格的显示值,如果是空的,就会返回空字符串。

删除空白列

实现原理

空白列与空白行类似:如果该列所有单元格都为空,就将其删除。

同样需要:

  1. 逐列检查:遍历该列的所有行,判断是否存在非空单元格。
  2. 倒序遍历:避免删除列时索引错乱。

示例代码

// 删除空白列
for (int j = sheet.LastColumn; j >= 1; j--)
{
    bool isEmptyCol = true;

    // 遍历该列的所有行
    for (int i = 1; i <= sheet.LastRow; i++)
    {
        if (!string.IsNullOrWhiteSpace(sheet.Range[i, j].Text))
        {
            isEmptyCol = false;
            break;
        }
    }

    if (isEmptyCol)
    {
        sheet.DeleteColumn(j);
    }
}

细节说明

  • sheet.LastColumn 返回最后一个非空单元格所在的列号,而不是 Excel 的最大列数 16384。
  • 如果只需要删除某个“区域”的空白列,可以在 for 循环里限定 j 的范围。

完整示例代码

下面给出一个完整的示例,展示如何删除 Excel 工作表中的空白行和空白列:

using Spire.Xls;
using System;

namespace RemoveEmptyRowsCols
{
    class Program
    {
        static void Main(string[] args)
        {
            // 加载 Excel 文档
            Workbook workbook = new Workbook();
            workbook.LoadFromFile("Sample.xlsx");

            // 获取第一个工作表
            Worksheet sheet = workbook.Worksheets[0];

            // 删除空白行
            for (int i = sheet.LastRow; i >= 1; i--)
            {
                bool isEmptyRow = true;
                for (int j = 1; j <= sheet.LastColumn; j++)
                {
                    if (!string.IsNullOrWhiteSpace(sheet.Range[i, j].Text))
                    {
                        isEmptyRow = false;
                        break;
                    }
                }
                if (isEmptyRow)
                {
                    sheet.DeleteRow(i);
                }
            }

            // 删除空白列
            for (int j = sheet.LastColumn; j >= 1; j--)
            {
                bool isEmptyCol = true;
                for (int i = 1; i <= sheet.LastRow; i++)
                {
                    if (!string.IsNullOrWhiteSpace(sheet.Range[i, j].Text))
                    {
                        isEmptyCol = false;
                        break;
                    }
                }
                if (isEmptyCol)
                {
                    sheet.DeleteColumn(j);
                }
            }

            // 保存结果
            workbook.SaveToFile("Cleaned.xlsx", ExcelVersion.Version2016);
        }
    }
}

总结

本文介绍了如何使用 Spire.XLS for .NET 在 C# 中删除 Excel 工作表的空白行和空白列:

  • 通过 倒序遍历 避免删除过程中索引混乱;
  • 使用 sheet.LastRowsheet.LastColumn 精确定位有效区域,提升效率;
  • 利用 sheet.Range[i, j].Text 判断单元格是否为空。

这样不仅能让数据更加整洁,还能避免在后续的数据分析和处理过程中出错。

如果想更进一步,还可以扩展:

  • 删除 只包含空格或空公式 的行列;
  • 删除 全是 0 值 的行列;
  • 删除数据之外多余的“边界区域”,只保留实际有效数据。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容