当前位置: 首页 > news >正文

C#-用于Excel处理的程序集

在.NET开发中,处理Excel文件是一项常见的任务,而有一些优秀的Excel处理包可以帮助开发人员轻松地进行Excel文件的读写、操作和生成。本文介绍了NPOI、EPPlus和Spire.XLS这三个常用的.NET Excel处理包,分别详细介绍了它们的特点、示例代码以及使用方法。通过对这些程序集的比较和示例代码的演示,读者可以更好地理解如何在C#开发中利用这些工具进行Excel文件的读取、写入和操作。这些程序集提供了丰富的功能和灵活的API,能够满足不同场景下对Excel文件处理的需求,有助于提高开发效率和减少工作量。

一、NPOI

NPOI是一个.NET平台上的开源库,用于读取和写入Microsoft Office格式的文件,包括Excel。NPOI提供了一套完整的API,使得开发人员可以方便地对Excel文件进行读写操作,而无需依赖Microsoft Office或其他付费组件。NPOI支持多种Excel格式,包括旧版的xls格式和新版的xlsx格式,同时也支持对Word和PowerPoint等Microsoft Office文件的操作。因其开源免费、功能强大且稳定性高的特点,NPOI被广泛应用于.NET平台的开发项目中。

1、示例代码

① 读取Excel文件

using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System;
using System.IO;class Program
{static void Main(string[] args){// 读取Excel文件using (FileStream fs = new FileStream("example.xlsx", FileMode.Open, FileAccess.Read)){IWorkbook workbook = new XSSFWorkbook(fs);ISheet sheet = workbook.GetSheetAt(0); // 获取第一个工作表// 遍历每一行for (int rowIdx = 0; rowIdx <= sheet.LastRowNum; rowIdx++){IRow row = sheet.GetRow(rowIdx);if (row != null){// 遍历每一个单元格for (int cellIdx = 0; cellIdx < row.LastCellNum; cellIdx++){ICell cell = row.GetCell(cellIdx);if (cell != null){Console.Write(cell.ToString() + "\t");}}Console.WriteLine();}}}}
}

该示例演示了如何使用NPOI库读取Excel文件中的数据。首先,通过FileStream打开Excel文件,然后创建XSSFWorkbook对象表示整个工作簿,通过GetSheetAt(0)获取第一个工作表。接下来,通过遍历每一行和每一个单元格,将单元格中的内容打印出来。


② 写入Excel文件

using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System.IO;class Program
{static void Main(string[] args){// 创建一个工作簿IWorkbook workbook = new XSSFWorkbook();// 创建一个工作表ISheet sheet = workbook.CreateSheet("Sheet1");// 创建行和单元格,并设置单元格的值IRow row = sheet.CreateRow(0);row.CreateCell(0).SetCellValue("Hello");row.CreateCell(1).SetCellValue("World");// 保存Excel文件using (FileStream fs = new FileStream("example.xlsx", FileMode.Create)){workbook.Write(fs);}}
}

该示例展示了如何使用NPOI库创建一个Excel文件并写入数据。首先,创建XSSFWorkbook对象表示整个工作簿,然后通过CreateSheet("Sheet1")创建一个名为"Sheet1"的工作表。接着,创建行和单元格,并通过SetCellValue方法设置单元格的值为"Hello"和"World"。最后,通过FileStream将工作簿写入到文件中。


二、EPPlus

EPPlus是一个.NET库,用于创建、操作和读写Excel 2007/2010/2013/2016文件,基于Open XML标准。下面详细解释示例代码中的读取和写入Excel文件的过程,并提供更多代码示例和详解。

1、示例代码

① 读取Excel文件

using OfficeOpenXml;
using System;
using System.IO;class Program
{static void Main(string[] args){FileInfo excelFile = new FileInfo("example.xlsx");using (ExcelPackage excelPackage = new ExcelPackage(excelFile)){ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets[0]; // 获取第一个工作表int rowCount = worksheet.Dimension.Rows;int colCount = worksheet.Dimension.Columns;// 遍历每一行和每一个单元格for (int row = 1; row <= rowCount; row++){for (int col = 1; col <= colCount; col++){Console.Write(worksheet.Cells[row, col].Value.ToString() + "\t");}Console.WriteLine();}}}
}

在读取Excel文件的示例代码中,我们首先通过FileInfo类创建了一个表示要读取的Excel文件的实例。然后,我们使用ExcelPackage类的构造函数打开了这个Excel文件,并创建了一个ExcelPackage对象,该对象表示整个Excel文件。接下来,我们通过Workbook属性获取了Excel文件的工作簿(workbook),再使用Worksheets属性获取了第一个工作表(worksheet)。通过Dimension属性,我们获取了工作表的行数和列数。最后,我们使用两层循环遍历了每一行和每一个单元格,并通过Cells属性获取单元格对象,并输出了单元格的值。


② 写入Excel文件

using OfficeOpenXml;
using System;
using System.IO;class Program
{static void Main(string[] args){FileInfo excelFile = new FileInfo("example.xlsx");using (ExcelPackage excelPackage = new ExcelPackage()){ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets.Add("Sheet1");worksheet.Cells["A1"].Value = "Hello";worksheet.Cells["B1"].Value = "World";excelPackage.SaveAs(excelFile);}}
}

在写入Excel文件的示例代码中,我们首先创建了一个FileInfo对象来指定要保存的Excel文件的路径。然后,我们创建了一个空的ExcelPackage对象,表示一个新的Excel文件。通过Workbook属性,我们创建了一个工作簿,并使用Worksheets属性添加了一个名为"Sheet1"的工作表。然后,我们使用Cells属性来设置单元格的值,例如"A1"单元格的值设置为"Hello",“B1"单元格的值设置为"World”。最后,我们调用SaveAs方法将Excel文件保存到指定路径。


三、Spire.XLS

Spire.XLS是一个专业的.NET Excel组件,支持读写、操作和生成Excel文件,提供了丰富的API和功能。与其他Excel组件相比,Spire.XLS具有性能优越、易于使用和丰富的特性等优势。

1、示例代码

① 读取Excel文件

using Spire.Xls;
using System;class Program
{static void Main(string[] args){Workbook workbook = new Workbook();workbook.LoadFromFile("example.xlsx");Worksheet sheet = workbook.Worksheets[0]; // 获取第一个工作表int rowCount = sheet.Rows.Length;int colCount = sheet.Columns.Length;for (int row = 1; row <= rowCount; row++){for (int col = 1; col <= colCount; col++){Console.Write(sheet[row, col].Text + "\t");}Console.WriteLine();}}
}

以上示例代码演示了如何使用Spire.XLS读取Excel文件。首先,我们创建了一个Workbook对象,并通过LoadFromFile方法加载了名为"example.xlsx"的Excel文件。然后,我们获取了第一个工作表,并分别获取了行数和列数。接着,我们通过两层循环遍历每个单元格,并输出其文本值。

② 写入Excel文件

using Spire.Xls;class Program
{static void Main(string[] args){Workbook workbook = new Workbook();Worksheet sheet = workbook.Worksheets[0];sheet.Range["A1"].Text = "Hello";sheet.Range["B1"].Text = "World";workbook.SaveToFile("example.xlsx", ExcelVersion.Version2013);}
}

以上示例代码展示了如何使用Spire.XLS写入Excel文件。首先,我们创建了一个Workbook对象,并获取了第一个工作表。然后,我们分别在"A1"和"B1"单元格中写入了"Hello"和"World"。最后,我们通过SaveToFile方法将工作簿保存为名为"example.xlsx"的Excel文件,指定保存的Excel版本为2013。


四、Excel处理的程序集总结

除了上述提到的包之外,还有其他一些.NET平台上的Excel处理包,如GemBox.Spreadsheet等,它们也提供了丰富的功能来处理Excel文件。这些示例代码展示了如何使用这些常用的.NET Excel处理包来读取和写入Excel文件。希望这可以帮助您更好地理解它们的用法。

下表列出了几种常见的.NET平台上的Excel处理包及其主要特点的对比:

包名称支持的格式主要功能是否开源许可证
NPOIxls, xlsx读写Excel文件、操作单元格Apache License
EPPlusxlsx读写Excel文件、操作单元格GNU GPL v2
Spire.XLSxls, xlsx, csv, pdf读写Excel文件、操作单元格商业许可证
GemBox.Spreadsheetxls, xlsx, csv, html读写Excel文件、操作单元格商业许可证

以上是对NPOI、EPPlus、Spire.XLS和GemBox.Spreadsheet几种常见Excel处理包的简要比较。这些包各有优缺点,开发人员可以根据项目需求和个人偏好选择合适的Excel处理包。

相关文章:

C#-用于Excel处理的程序集

在.NET开发中&#xff0c;处理Excel文件是一项常见的任务&#xff0c;而有一些优秀的Excel处理包可以帮助开发人员轻松地进行Excel文件的读写、操作和生成。本文介绍了NPOI、EPPlus和Spire.XLS这三个常用的.NET Excel处理包&#xff0c;分别详细介绍了它们的特点、示例代码以及…...

HTTPS基础

目录 HTTPS简介 HTTP与HTTPS的区别 CA证书 案例 服务器生成私钥与证书 查看证书和私钥存放路径 Cockpit(图像化服务管理工具) HTTPS简介 超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。HTTP协议以明文方式发送内容&#xff0c;不提供任何方式的数据加密&…...

【Flink SQL】Flink SQL 基础概念(四):SQL 的时间属性

《Flink SQL 基础概念》系列&#xff0c;共包含以下 5 篇文章&#xff1a; Flink SQL 基础概念&#xff08;一&#xff09;&#xff1a;SQL & Table 运行环境、基本概念及常用 APIFlink SQL 基础概念&#xff08;二&#xff09;&#xff1a;数据类型Flink SQL 基础概念&am…...

文字弹性跳动CSS3代码

文字弹性跳动CSS3代码&#xff0c;源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面&#xff0c;重定向这个界面 下载地址 文字弹性跳动CSS3代码...

前端小白的学习之路(事件流)

提示&#xff1a;事件捕获&#xff0c;事件冒泡&#xff0c;事件委托 目录 事件模型(DOM事件流) 1.事件是什么 2.事件流 1).事件流的三个阶段 3.参考代码 二、事件委托 1.概念 2.使用案例 3.阻止冒泡行为 事件模型(DOM事件流) 1.事件是什么 1). 事件是HTML和Javascr…...

电脑文件误删除如何恢复?分享三个简单数据恢复方法

在日常使用电脑的过程中&#xff0c;文件误删除的情况时有发生。无论是由于操作失误还是病毒感染&#xff0c;丢失的文件都可能对我们的工作和学习造成极大的影响。因此&#xff0c;掌握文件恢复的方法显得尤为重要。下面围绕“电脑文件误删除如何恢复”这一主题&#xff0c;给…...

MySQL实战:监控

监控指标 性能类指标 名称说明QPS数据库每秒处理的请求数量TPS数据库每秒处理的事务数量并发数数据库实例当前并行处理的会话数量连接数连接到数据库会话的数量缓存命中率Innodb的缓存命中率 功能类指标 名称说明可用性数据库是否正常对外提供服务阻塞当前是否有阻塞的会话…...

MySQL自增主键自动生成的主键重置

需求描述&#xff1a; 从主键1开始&#xff0c;insert操作自增了五个&#xff0c;库里五条数主键是1、2、3、4、5&#xff1b; 然后把主键是3、4、5的三条数据给删了&#xff0c;再继续insert&#xff0c;主键就是6了 因为这里表会把最大的数即5记住&#xff0c;下次自增即为…...

reverse_iterator实现

对于实现reverse_iterator&#xff0c;我们可以学栈和队列的实现过程&#xff0c;利用适配器&#xff0c;实现如下; #pragma oncetemplate<class Iterator,class Ref,class Ptr> class reverse_Iterator { public://构造函数&#xff1a;reverse_Iterator(Iterator it):…...

C++:什么情况下函数应该声明为纯虚函数

在C中&#xff0c;函数应该在以下情况下声明为纯虚函数&#xff1a; 抽象基类&#xff1a;当你希望定义一个基类&#xff0c;该基类不能被实例化&#xff0c;只能作为其他类的基类时&#xff0c;你应该在基类中声明至少一个纯虚函数。这样的基类被称为抽象基类。纯虚函数通过在…...

【全面了解自然语言处理三大特征提取器】RNN(LSTM)、transformer(注意力机制)、CNN

目录 一 、RNN1.RNN单个cell的结构2.RNN工作原理3.RNN优缺点 二、LSTM1.LSTM单个cell的结构2. LSTM工作原理 三、transformer1 Encoder&#xff08;1&#xff09;position encoding&#xff08;2&#xff09;multi-head-attention&#xff08;3&#xff09;add&norm 残差链…...

区块链推广海外市场怎么做,CloudNEO服务商免费为您定制个性化营销方案

随着区块链技术的不断发展和应用场景的扩大&#xff0c;区块链项目希望能够进入海外市场并取得成功已成为越来越多公司的目标之一。然而&#xff0c;要在海外市场推广区块链项目&#xff0c;需要采取有效的营销策略和措施。作为您的区块链项目营销服务商&#xff0c;CloudNEO将…...

【S5PV210】 | ARM的指令集合

【S5PV210】 | ARM的指令集合 时间&#xff1a;2024年3月17日23:32:06 目录 文章目录 【S5PV210】 | ARM的指令集合目录 ARM指令集具有一系列显著的特点。首先&#xff0c;它属于RISC&#xff08;精简指令集计算机&#xff09;架构&#xff0c;这意味着译码机制相对简单。在AR…...

2024-3-17Go语言入门

在Go语言中&#xff1a; var a chan int 定义了一个名为 a 的变量&#xff0c;其类型为 chan int。这意味着 a 是一个整型值的通道&#xff08;channel&#xff09;。通道是Go语言中用于goroutine之间通信的一种机制&#xff0c;你可以通过通道发送和接收特定类型的值。在这个例…...

AJAX-XMLHttpRequest

XMLHttpRequest 定义&#xff1a; XMLHttpRequest对象用于与服务器交互。通过XMLHttpRequest可以在不断刷新页面的情况下请求特定URL&#xff0c;获取数据。这允许网页在不影响用户操作的情况下&#xff0c;更新页面的局部内容。 关系&#xff1a; axios内部采用XMLHttpReques…...

【GPT-SOVITS-04】SOVITS 模块-鉴别模型解析

说明&#xff1a;该系列文章从本人知乎账号迁入&#xff0c;主要原因是知乎图片附件过于模糊。 知乎专栏地址&#xff1a; 语音生成专栏 系列文章地址&#xff1a; 【GPT-SOVITS-01】源码梳理 【GPT-SOVITS-02】GPT模块解析 【GPT-SOVITS-03】SOVITS 模块-生成模型解析 【G…...

论文阅读_时序模型_iTransformer

1 2 3 4 5 6 7 8英文名称: ITRANSFORMER: INVERTED TRANSFORMERS ARE EFFECTIVE FOR TIME SERIES FORECASTING 中文名称: ITRANSFORMER&#xff1a;倒置Transformers在时间序列预测中的有效性 链接: https://openreview.net/forum?idX6ZmOsTYVs 代码: https://github.com/thum…...

Docker 哲学 - 容器操作 -cp

1、拷贝 容器绑定的 volume的 数据&#xff0c;到指定目录 2、匿名挂载 volume 只定义一个数据咋在容器内的path&#xff0c;docker自动生成一个 sha256 的key作为 volume 名字。这个 sha256 跟 commitID 一致都是唯一的所以 &#xff0c;docker利用这个机制&#xff0c;可以…...

作品展示ETL

1、ETL 作业定义、作业导入、控件拖拽、执行、监控、稽核、告警、报告导出、定时设定 欧洲某国电信系统数据割接作业定义中文页面&#xff08;作业顶层&#xff0c;可切英文&#xff0c;按F1弹当前页面帮助&#xff09; 涉及文件拆分、文件到mysql、库到库、数据清洗、数据转…...

python的集合应用

在Python中&#xff0c;集合是一种无序、可变的数据类型&#xff0c;用于存储不重复的元素。Python提供了内置的集合类型 set&#xff0c;以及 frozenset&#xff08;不可变的集合&#xff09;。以下是一些Python集合的常见应用场景&#xff1a; 去重&#xff1a; 集合是存储唯…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...

day36-多路IO复用

一、基本概念 &#xff08;服务器多客户端模型&#xff09; 定义&#xff1a;单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用&#xff1a;应用程序通常需要处理来自多条事件流中的事件&#xff0c;比如我现在用的电脑&#xff0c;需要同时处理键盘鼠标…...

Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践

在 Kubernetes 集群中&#xff0c;如何在保障应用高可用的同时有效地管理资源&#xff0c;一直是运维人员和开发者关注的重点。随着微服务架构的普及&#xff0c;集群内各个服务的负载波动日趋明显&#xff0c;传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...

WebRTC调研

WebRTC是什么&#xff0c;为什么&#xff0c;如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...