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处理包及其主要特点的对比:
| 包名称 | 支持的格式 | 主要功能 | 是否开源 | 许可证 |
|---|---|---|---|---|
| NPOI | xls, xlsx | 读写Excel文件、操作单元格 | 是 | Apache License |
| EPPlus | xlsx | 读写Excel文件、操作单元格 | 是 | GNU GPL v2 |
| Spire.XLS | xls, xlsx, csv, pdf | 读写Excel文件、操作单元格 | 否 | 商业许可证 |
| GemBox.Spreadsheet | xls, xlsx, csv, html | 读写Excel文件、操作单元格 | 否 | 商业许可证 |
以上是对NPOI、EPPlus、Spire.XLS和GemBox.Spreadsheet几种常见Excel处理包的简要比较。这些包各有优缺点,开发人员可以根据项目需求和个人偏好选择合适的Excel处理包。
相关文章:
C#-用于Excel处理的程序集
在.NET开发中,处理Excel文件是一项常见的任务,而有一些优秀的Excel处理包可以帮助开发人员轻松地进行Excel文件的读写、操作和生成。本文介绍了NPOI、EPPlus和Spire.XLS这三个常用的.NET Excel处理包,分别详细介绍了它们的特点、示例代码以及…...
HTTPS基础
目录 HTTPS简介 HTTP与HTTPS的区别 CA证书 案例 服务器生成私钥与证书 查看证书和私钥存放路径 Cockpit(图像化服务管理工具) HTTPS简介 超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。HTTP协议以明文方式发送内容,不提供任何方式的数据加密&…...
【Flink SQL】Flink SQL 基础概念(四):SQL 的时间属性
《Flink SQL 基础概念》系列,共包含以下 5 篇文章: Flink SQL 基础概念(一):SQL & Table 运行环境、基本概念及常用 APIFlink SQL 基础概念(二):数据类型Flink SQL 基础概念&am…...
文字弹性跳动CSS3代码
文字弹性跳动CSS3代码,源码由HTMLCSSJS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果,也可以上传到服务器里面,重定向这个界面 下载地址 文字弹性跳动CSS3代码...
前端小白的学习之路(事件流)
提示:事件捕获,事件冒泡,事件委托 目录 事件模型(DOM事件流) 1.事件是什么 2.事件流 1).事件流的三个阶段 3.参考代码 二、事件委托 1.概念 2.使用案例 3.阻止冒泡行为 事件模型(DOM事件流) 1.事件是什么 1). 事件是HTML和Javascr…...
电脑文件误删除如何恢复?分享三个简单数据恢复方法
在日常使用电脑的过程中,文件误删除的情况时有发生。无论是由于操作失误还是病毒感染,丢失的文件都可能对我们的工作和学习造成极大的影响。因此,掌握文件恢复的方法显得尤为重要。下面围绕“电脑文件误删除如何恢复”这一主题,给…...
MySQL实战:监控
监控指标 性能类指标 名称说明QPS数据库每秒处理的请求数量TPS数据库每秒处理的事务数量并发数数据库实例当前并行处理的会话数量连接数连接到数据库会话的数量缓存命中率Innodb的缓存命中率 功能类指标 名称说明可用性数据库是否正常对外提供服务阻塞当前是否有阻塞的会话…...
MySQL自增主键自动生成的主键重置
需求描述: 从主键1开始,insert操作自增了五个,库里五条数主键是1、2、3、4、5; 然后把主键是3、4、5的三条数据给删了,再继续insert,主键就是6了 因为这里表会把最大的数即5记住,下次自增即为…...
reverse_iterator实现
对于实现reverse_iterator,我们可以学栈和队列的实现过程,利用适配器,实现如下; #pragma oncetemplate<class Iterator,class Ref,class Ptr> class reverse_Iterator { public://构造函数:reverse_Iterator(Iterator it):…...
C++:什么情况下函数应该声明为纯虚函数
在C中,函数应该在以下情况下声明为纯虚函数: 抽象基类:当你希望定义一个基类,该基类不能被实例化,只能作为其他类的基类时,你应该在基类中声明至少一个纯虚函数。这样的基类被称为抽象基类。纯虚函数通过在…...
【全面了解自然语言处理三大特征提取器】RNN(LSTM)、transformer(注意力机制)、CNN
目录 一 、RNN1.RNN单个cell的结构2.RNN工作原理3.RNN优缺点 二、LSTM1.LSTM单个cell的结构2. LSTM工作原理 三、transformer1 Encoder(1)position encoding(2)multi-head-attention(3)add&norm 残差链…...
区块链推广海外市场怎么做,CloudNEO服务商免费为您定制个性化营销方案
随着区块链技术的不断发展和应用场景的扩大,区块链项目希望能够进入海外市场并取得成功已成为越来越多公司的目标之一。然而,要在海外市场推广区块链项目,需要采取有效的营销策略和措施。作为您的区块链项目营销服务商,CloudNEO将…...
【S5PV210】 | ARM的指令集合
【S5PV210】 | ARM的指令集合 时间:2024年3月17日23:32:06 目录 文章目录 【S5PV210】 | ARM的指令集合目录 ARM指令集具有一系列显著的特点。首先,它属于RISC(精简指令集计算机)架构,这意味着译码机制相对简单。在AR…...
2024-3-17Go语言入门
在Go语言中: var a chan int 定义了一个名为 a 的变量,其类型为 chan int。这意味着 a 是一个整型值的通道(channel)。通道是Go语言中用于goroutine之间通信的一种机制,你可以通过通道发送和接收特定类型的值。在这个例…...
AJAX-XMLHttpRequest
XMLHttpRequest 定义: XMLHttpRequest对象用于与服务器交互。通过XMLHttpRequest可以在不断刷新页面的情况下请求特定URL,获取数据。这允许网页在不影响用户操作的情况下,更新页面的局部内容。 关系: axios内部采用XMLHttpReques…...
【GPT-SOVITS-04】SOVITS 模块-鉴别模型解析
说明:该系列文章从本人知乎账号迁入,主要原因是知乎图片附件过于模糊。 知乎专栏地址: 语音生成专栏 系列文章地址: 【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:倒置Transformers在时间序列预测中的有效性 链接: https://openreview.net/forum?idX6ZmOsTYVs 代码: https://github.com/thum…...
Docker 哲学 - 容器操作 -cp
1、拷贝 容器绑定的 volume的 数据,到指定目录 2、匿名挂载 volume 只定义一个数据咋在容器内的path,docker自动生成一个 sha256 的key作为 volume 名字。这个 sha256 跟 commitID 一致都是唯一的所以 ,docker利用这个机制,可以…...
作品展示ETL
1、ETL 作业定义、作业导入、控件拖拽、执行、监控、稽核、告警、报告导出、定时设定 欧洲某国电信系统数据割接作业定义中文页面(作业顶层,可切英文,按F1弹当前页面帮助) 涉及文件拆分、文件到mysql、库到库、数据清洗、数据转…...
python的集合应用
在Python中,集合是一种无序、可变的数据类型,用于存储不重复的元素。Python提供了内置的集合类型 set,以及 frozenset(不可变的集合)。以下是一些Python集合的常见应用场景: 去重: 集合是存储唯…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
Razor编程中@Html的方法使用大全
文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...
Vite中定义@软链接
在webpack中可以直接通过符号表示src路径,但是vite中默认不可以。 如何实现: vite中提供了resolve.alias:通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...
Python训练营-Day26-函数专题1:函数定义与参数
题目1:计算圆的面积 任务: 编写一个名为 calculate_circle_area 的函数,该函数接收圆的半径 radius 作为参数,并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求:函数接收一个位置参数 radi…...
SQL进阶之旅 Day 22:批处理与游标优化
【SQL进阶之旅 Day 22】批处理与游标优化 文章简述(300字左右) 在数据库开发中,面对大量数据的处理任务时,单条SQL语句往往无法满足性能需求。本篇文章聚焦“批处理与游标优化”,深入探讨如何通过批量操作和游标技术提…...
