百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

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

ztj100 2025-09-12 06:20 5 浏览 0 评论

在日常处理 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 值 的行列;
  • 删除数据之外多余的“边界区域”,只保留实际有效数据。

相关推荐

xls文件保存宏_excel如何保存宏为其他文件使用

一、直接保存为旧版.xls格式(兼容性优先)1.操作方法-在Excel中打开文件→点击「文件」→「另存为」→保存类型选择“Excel97-2003工作簿(*.xls)”。-系统...

C 插入或删除word分页符_怎么删除插了分页符的空白页

分页符是word中常用的一种分页的符号,它标志着上一页的结束和下一页的开始。在word中分页符有两种,一种是自动分页符,也叫软分页符,即一页数据写满以后转到下一页时word自动插入的一个分页符;另一种...

177.C# SqlSugar 删除数据_sql删除数据代码

摘要普通删除、单表删除、表达式删除,子查询删除正文根据主键Where条件删除varret=Db.Deleteable<wms_user>().Where(newwms_user...

C#使用handle实现获取占用指定文件或文件夹的进程(Locksmith功能)

前言:很多时候,一些不知道啥进程,把你的文件给占用了,然后就没办法删掉或者做其他操作。如果使用Locksmith功能,就可以实现快速锁定是哪个进程在搞事情,把对应进程干掉就可以了。下面内容演示C#使用...

小材大用!用好Windows 10文件缩略图

当我们将图片传输到电脑中后,默认情况下Windows会显示小图预览,因此我们可以不打开图片就能看到图的基本模样。为了防止系统负担过重,Windows只在打开特定的文件夹时生成缩略图,且在系统关机时缩略...

C#:删除 Word 中的页眉或页脚_c# 删除文件

C#:删除Word中的页眉或页脚在处理Word文档批量操作时,我们经常需要清除页眉页脚——比如合并文档后去除冗余信息,或为标准化报告格式。手动操作不仅繁琐,更难以集成到自动化流程中。使用Spire...

C# INI文件读写方法_c#ini文件如何一次读取所有数据

在C#项目的开发实践里,存在着一种十分常见且实用的操作习惯,那就是把一部分常用的参数值写入到.ini文件当中。这种做法背后有着充分的考量。从软件系统的设计角度来看,将常用参数集中存放在.ini文件...

C# 基础知识系列- 14 IO篇 文件的操作(1)

0.前言本章节是IO篇的第二集,我们在上一篇中介绍了C#中IO的基本概念和一些基本方法,接下来我们介绍一下操作文件的方法。在编程的世界中,操作文件是一个很重要的技能。...

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

在日常处理Excel数据时,经常会遇到表格中夹杂着许多空白行或空白列。这些空白内容不仅影响数据的整洁性,还可能导致数据处理和分析结果出错。手动逐一删除这些空白行列不仅效率低下,而且容易遗漏。本文将...

微信小程序原生开发【辅助框架】 LWX

项目介绍作者开发了一年多的小程序,在开发过程中遇到了很多的坑与不方便之处,同时又对原生开发有着一定的执著,但是对于习惯了我这种用惯了vue的人来说,原生小程序中的一些写法确实让人感到难受,我想大家在进...

谷歌正式发布Android 12,UI更好看,打造属于自己的定制化属性

焕然一新的Android12今年5月的GoogleI/O大会上,谷歌推出了Android12系统,这是原生安卓系统史上最大的设计变化,从此旧貌换新颜。...

【推荐】一个基于 SpringBoot 框架开发的 OA 办公自动化系统

如果您对源码&技术感兴趣,请点赞+收藏+转发+关注,大家的支持是我分享最大的动力!!!项目介绍...

「干货」9个最热门React PC端组件库|UI框架

最近一直在使用React.js开发项目,在开发过程中也用到了一些开源UI组件库。上次有给大家分享React移动端组件库,今天,就给大家推荐9个常用ReactPC端组件库。...

Android主流UI开源库整理_android ui 布局开源框架

前言最近老大让我整理一份Android主流UI开源库的资料,以补充公司的Android知识库。由于对格式不做特别限制,于是打算用博客的形式记录下来,方便查看、防丢并且可以持续维护、不断更新。标题隐...

Datetimepicker.js用法_datepicker的用法

$('.form_date').datetimepicker({//初始化language:'zh-CN',//weekStart:1,...

取消回复欢迎 发表评论: