使用C# 快速删除Excel表格中的重复行数据-详解

article/2025/9/8 2:22:40

目录

简介 

使用工具

C# 删除Excel工作表中的重复行

C# 删除指定Excel单元格区域中的重复行

C# 基于特定列删除重复行

RemoveDuplicates 方法快速比较


简介 

重复行是指在Excel表格中完全相同的多行数据。这些冗余行的存在可能源于多种原因,例如:

  • 数据输入错误:用户在手动输入数据时,可能不小心多次输入相同的信息。
  • 数据导入:从其他系统或文件导入数据时,可能会出现重复记录,尤其是在合并多个数据源时。
  • 复制粘贴:在处理数据时,复制粘贴操作可能导致无意中创建重复行。

删除这些重复行至关重要,因为它们不仅会干扰数据分析,还可能导致错误的决策和结论。通过清理重复数据,可以提高数据的准确性和整洁性,从而使后续的分析工作更加高效。这篇文章将探讨如何使用C# 实现快速删除Excel表格中的重复行,主要涵盖内容如下:

  • C# 删除Excel工作表中的重复行
  • C# 删除指定Excel单元格区域中的重复行
  • C# 基于特定列删除重复行

使用工具

要使用 C# 从 Excel 表格中删除重复数据,需要使用合适的Excel文档处理库。本文所使用的库是 Spire.XLS for .NET,它支持在.NET应用程序中创建和操作Excel 文件,无需安装Microsoft Excel。

安装Spire.XLS for .NET

在开始之前,在Package Manager Console中运行以下命令从NuGet 安装 Spire.XLS 库:

Install-Package Spire.XLS

C# 删除Excel工作表中的重复行

重复行可能会导致工作表结构混乱,影响数据的完整性。Spire.XLS 提供了一种简单的方法来检测和删除工作表中的重复行。

语法

sheet.RemoveDuplicates();

工作原理

该方法会检查工作表中的每一行,并比较每行内的所有单元格。只有当所有单元格的值与另一行完全一致时,该行才会被视为重复。第一次出现的行将被保留,而后续的重复行将被删除。

实现代码

using Spire.Xls;namespace RemoveDuplicatesFromWorksheet
{internal class Program{static void Main(string[] args){// 打开 Excel 文件Workbook workbook = new Workbook();workbook.LoadFromFile("测试.xlsx");// 获取所需的工作表(索引从0开始)Worksheet sheet = workbook.Worksheets[0];// 从工作表中删除重复行sheet.RemoveDuplicates();// 保存修改后的文件workbook.SaveToFile("删除工作表内重复行.xlsx", ExcelVersion.Version2016);workbook.Dispose();}}
}

C#删除Excel工作表重复行数据

C# 删除指定Excel单元格区域中的重复行

有时,你可能只想清除工作表特定单元格区域中的重复行数据,而不影响其他部分。Spire.XLS 支持指定要删除重复项的单元格范围。

语法

sheet.RemoveDuplicates(int startRow, int startColumn, int endRow, int endColumn);

参数

startRow, startColumn, endRow, endColumn: 定义要检查重复项的单元格区域(行列索引从1开始)。

工作原理

该方法会比较指定单元格区域内的所有行,如果有两行或多行的每一列的值都完全相同,那么这些行就被认为是重复的,只保留第一次出现的那一行。区域外的行不会受到影响,仍然保持原样。

实现代码

using Spire.Xls;namespace RemoveDuplicateRowsFromCellRange
{internal class Program{static void Main(string[] args){// 打开 Excel 文件Workbook workbook = new Workbook();workbook.LoadFromFile("测试.xlsx");// 获取所需的工作表(索引从0开始)Worksheet sheet = workbook.Worksheets[0];// 从特定单元格区域中删除重复行sheet.RemoveDuplicates(2, 1, 9, 4);// 保存修改后的文件workbook.SaveToFile("删除单元格区域内重复行.xlsx", ExcelVersion.Version2016);workbook.Dispose();}}
}

C# 基于特定列删除重复行

在处理某些特定数据集时,您可能只希望根据特定的关键列来删除重复项,而忽略其他列的值。

Spire.XLS 提供了另一种 RemoveDuplicates() 方法重载,以支持这种需求。使用此方法,你可以:

  • 指定要操作的单元格区域
  • 指明该区域是否包含标题行
  • 选择用于比较重复的列

语法

sheet.RemoveDuplicates(int startRow, int startColumn, int endRow, int endColumn, bool hasHeaders, int[] columnOffsets);

参数

  • startRow, startColumn, endRow, endColumn: 定义要检查重复数据的单元格区域(行列索引从1开始)。
  • hasHeaders: 判定第一行是否为标题行。如果为 true,则第一行将不参与比较。
  • columnOffsets: 相对于 startColumn 的偏移数组,指定用于比较的列,例如0表示指定区域中的第一列。

工作原理

该方法在删除重复行时,仅考虑用户指定的某些列。如果多行在这些指定列中的值完全相同,则只保留第一行,其他重复的行将被删除。这种做法尤其适用于需要根据特定标识(如客户 ID 或电子邮件)来确保数据唯一性的场景。

实现代码

using Spire.Xls;namespace RemoveDuplicateRows
{internal class Program{static void Main(string[] args){// 打开 Excel 文件Workbook workbook = new Workbook();workbook.LoadFromFile("测试.xlsx");// 获取所需的工作表(索引从0开始)Worksheet sheet = workbook.Worksheets[0];// 定义要检查重复行的区域int startRow = 2;int startColumn = 1;int endRow = 9;int endColumn = 4;// 判定区域内的第一行是否是标题行bool hasHeaders = false;// 指定用于比较重复的列int[] columnsToCompare = { 1, 2 };// 在定义的区域内基于指定列删除重复行sheet.RemoveDuplicates(startRow, startColumn, endRow, endColumn, hasHeaders, columnsToCompare);// 保存修改后的文件workbook.SaveToFile("基于特定列删除重复行.xlsx", ExcelVersion.Version2016);workbook.Dispose();            }}
}

RemoveDuplicates 方法快速比较

以下是RemoveDuplicates 几种方法的快速比较,你可以根据自己的需求选择最合适的方法:

方法

适用范围

RemoveDuplicates()

整个工作表

RemoveDuplicates(int startRow, int startColumn, int endRow, int endColumn)

指定单元格区域

RemoveDuplicates(int startRow, int startColumn, int endRow, int endColumn, bool hasHeaders, int[] columnOffsets)

基于特定列

以上就是使用C#实现快速删除Excel工作表中重复行数据的全部内容。感谢阅读!


http://www.hkcw.cn/article/huretHMbqY.shtml

相关文章

OpenCv高阶(十九)——dlib关键点定位

文章目录 一、什么是人脸关键点定位?二、关键点模型的下载及关键信息的理解三、dlib关键点定位的简单实现(1)导入必要的库(2)从指定路径读取图像文件(3)创建dlib的正面人脸检测器对象&#xff0…

【Java】线程池的实现原理是怎样的?CPU密集型任务与IO密集型任务的区别?

一、CPU密集型与IO密集型任务 1.CPU密集型任务(CPU-bound) 定义:需要大量CPU计算资源,大部分时间都在进行运算的任务。 这类任务的特点是计算量大,CPU占用率高。 特点: 主要消耗CPU资源执行速度取决于CPU的计算能力通常涉及复…

【QT】理解QT的“元对象系统”

目录 前置知识: (1)C运行时多态 (2)RTTI QT的元对象系统 1.元对象系统基本内容 2.元对象代码 3.元对象系统其它特性 前置知识: (1)C运行时多态 C的运行时多态是由虚函数和继…

Windows Server 2019--10 网络地址转换

本章要点 了解 NAT 技术的核心原理。掌握 NAT 技术的应用。掌握 NAT 网关的配置。 IP 地址分为两类,分别是私有IP地址(Private IP)与公用IP地址(Public IP)。 位于内部网络中的计算机使用的是私有IP地址,其不需要向IP地址发放机构提出申请。私有IP地址…

掌握STP技术:网络环路终结者实战

实验目的 理解生成树协议(STP)的基本原理及其在网络中的作用。掌握STP的配置方法,包括根桥选举、端口状态转换等关键机制。通过实验验证STP如何防止网络环路并实现冗余路径的优化管理。 实验环境 设备:支持STP的交换机&#xf…

通义灵码2.5——基于MCP打造我的12306火车票智能查询小助手

前沿技术应用全景图 本项目作为通义灵码2.5的标杆实践案例,展现了AI辅助开发在复杂业务系统中的革命性突破。通过深度集成12306 MCP服务体系,我们构建了一个融合智能决策、环境感知和自主优化的新一代火车票查询系统。 #mermaid-svg-4D7QqwJjsQRdKVP7 {…

不可变集合类型转换异常

记录一个异常:class java.util.ImmutableCollections$ListN cannot be cast to class java.util.ArrayList (java.util.ImmutableCollections$ListN and java.util.ArrayList 文章目录 1、原因2、解决方式一3、解决方式二4、关于不可变集合的补充4.1 JDK8和9的对比4…

初学python的我开始Leetcode题10-1

提示:100道LeetCode热题10-1主要是回溯相关,包括四题:全排列、子集、电话号码的字母组合、组合总和。由于初学,所以我的代码部分仅供参考。 前言 下周是第十六周,然后是两周的期末周,所以马上会缺两周左右…

IPTV电视直播 1.6.0 | 手机电视直播 秒播无卡顿

电视直播是一款功能强大且用户体验优秀的电视直播软件。它提供了丰富的节目资源,并支持高清画质播放,无论是家庭娱乐、移动办公还是学习,都能满足用户的需求。该应用完全无广告、无弹窗,确保用户享受纯净的观看体验。此外&#xf…

BugKu Web渗透之备份是个好习惯

启动场景后,网页显示一段字符串。 看起来像md5值,但是又过长了。 步骤一:右键查看源代码,没有发现任何异常。 步骤二:使用dirsearch去查看是否有其他可疑文件。 在终端输入: dirsearch -u http://117.72.…

深入理解 SELinux:通过 Nginx 和 SSH 服务配置实践安全上下文与端口策略

目录 一、引言 二、实验环境说明 三、实验 1:Nginx 服务安全上下文配置 3.1 实验目标 3.2 操作步骤 1. 开启 SELinux 并重启系统 2. 安装 Nginx 并创建自定义目录 3. 配置 Nginx 指向自定义目录 4. 分析 SELinux 上下文冲突 5. 修改上下文为合法类型 6. 验…

Linux 开发工具

1.sudo白名单 我们如果要让普通用户有sudo的权限 我们就要登录root用户 在/etc/sudoers目录下 通过文本编辑器(我用的是vim) 将要添加的用户 直接添加进去 如下图光标行就是我添加的白名单用户 然后我们添加的这个ly_centos就有sudo的权限了 2.gcc…

React 第四十九节 Router中useNavigation的具体使用详解及注意事项

前言 useNavigation 是 React Router 中一个强大的钩子,用于获取当前页面导航的状态信息。 它可以帮助开发者根据导航状态优化用户体验,如显示加载指示器、防止重复提交等。 一、useNavigation核心用途 检测导航状态:判断当前是否正在进行…

从数据持久化到网络通信与OpenCV:Qt应用程序开发的深度探索与实战

文章目录 前言一、QSettings:轻量级数据持久化方案1.1 QSettings 主要特点1.2 QSettings 常用函数整理 二、数据库2.1 连接SQLite数据库2.2 建表2.3 增删改 三、网络编程3.1 网络分层3.2 IP地址3.3 端口号3.4 基于TCP的Socket通信3.4 相关接口3.4.1核心类3.4.2 通信…

【产品经理从0到1】自媒体端产品设计

后台的定义 “后台” 与“前台”都是相对独立的平台,前台是服务于互联网用户的平台 ,后台主要是支撑前台页面内容、数据及对前台业务情况的统计分析的系统; 后台与前台的区别 第1:使用用户不同 前台用户:互联网用户…

Ubuntu20.04操作系统ssh开启oot账户登录

文章目录 1 前提2 设置root密码3 允许ssh登录root账户3.1 编辑配置文件3.2 重启ssh服务 4 安全注意事项 1 前提 ssh可以使用普通用户正常登录。 2 设置root密码 打开终端,设置密码 sudo passwd root # 设置root密码3 允许ssh登录root账户 3.1 编辑配置文件 su…

四叉树实现四边形网格

import matplotlib.pyplot as plt import matplotlib.patches as patches import numpy as np # 四叉树节点 class QuadNode:def __init__(self, x, y, width, height, depth):self.x xself.y yself.width widthself.height heightself.depth depthself.children []self.…

园区智能化集成平台汇报方案

该方案为园区智能化集成平台设计,依据《智能建筑设计标准》等 20 余项国家与行业规范,针对传统园区信息孤岛、反应滞后、经验流失、管理粗放等痛点,构建可视化智慧园区管理平台,实现大屏数据可视化、三维设备监控、智慧运维(含工单管理、巡检打卡)、能源能耗分析、AI 安防…

C#中的BeginInvoke和EndInvoke:异步编程的双剑客

文章目录 引言1. BeginInvoke和EndInvoke的基本概念1.1 什么是BeginInvoke和EndInvoke1.2 重要概念解释 2. 委托中的BeginInvoke和EndInvoke2.1 BeginInvoke方法2.2 EndInvoke方法2.3 两者的关系 3. 使用方式与模式3.1 等待模式3.2 轮询模式3.3 等待句柄模式3.4 回调模式 4. 底…

基于通义千问的儿童陪伴学习和成长的智能应用架构。

1.整体架构概览 我们的儿童聊天助手将采用典型的语音交互系统架构,结合大模型能力和外部知识库: 2. 技术方案分解 2.1. 前端应用/设备 选择: 移动App(iOS/Android)、Web应用,或者集成到智能音箱/平板等硬件设备中。技术栈: 移动App: React Native / Flutter (跨平台…