ClosedXML

一、类库介绍

ClosedXML是一个用于读取、操作和写入Excel 2007+ (.xlsx, .xlsm)文件的.NET第三方库。它基于OpenXML,但与OpenXML相比,ClosedXML具有更高的性能和更易于使用的API接口。

ClosedXML支持XML文档的解析和生成,可以处理复杂的XML结构。同时,它还提供了丰富的API,可以方便地进行XML文档的查询、修改、添加和删除操作。此外,ClosedXML还支持XPath和XSLT查询,可以进行高效的XML数据检索和转换。

在使用ClosedXML时,您需要将ClosedXML.dll添加到您的项目中,并使用相关的API进行Excel文件的读取和写入。ClosedXML支持多种数据类型,包括字符串、数字、日期、布尔值等,并支持单元格格式设置。此外,您还可以使用ClosedXML进行样式设置,包括字体、边框、颜色等。

除了基本的Excel文件操作,ClosedXML还支持图表、公式、数据验证、条件格式等高级功能。同时,ClosedXML还提供了多种异常处理机制,可以帮助您更好地处理异常情况。

官网:

https://docs.closedxml.io/en/latest/

https://github.com/ClosedXML/ClosedXML

二、安装方式

2.1 直接nuget搜索安装

2.2 命令行安装方式

工具→Nuget包管理器→程序包管理器控制台

输入如下命令:

代码语言:javascript

复制

Install-Package ClosedXML

三、性能测试

3.1 保存性能

3.2 读取性能

四、测试案例

4.1 直接插入DataTable

代码语言:javascript

复制

  /// <summary>/// 插入DataTable/// </summary>private static void InsertDataTable(){// 创建一个新的 DataTable 对象DataTable dataTable = new DataTable();// 定义表的列dataTable.Columns.Add("ID", typeof(int));dataTable.Columns.Add("Name", typeof(string));dataTable.Columns.Add("Age", typeof(int));// 添加数据行dataTable.Rows.Add(1, "John", 25);dataTable.Rows.Add(2, "Alice", 30);dataTable.Rows.Add(3, "Bob", 40);using (var workbook = new XLWorkbook()){var worksheet = workbook.Worksheets.Add("Sheet1");worksheet.FirstCell().InsertTable(dataTable);workbook.SaveAs("D:\\tableDemo.xlsx");}}

4.2 直接插入list

代码语言:javascript

复制

   /// <summary>/// 插入list/// </summary>private static void InsertList(){List<UserInfo> list = new List<UserInfo>();list.Add(new UserInfo{name = "小明",age = 30,address = "北京"});list.Add(new UserInfo{name = "小李",age = 20,address = "郑州"});list.Add(new UserInfo{name = "小强",age = 26,address = "上海"});using (var workbook = new XLWorkbook()){var worksheet = workbook.Worksheets.Add("Sheet1");// 设置列头worksheet.Cell("A1").Value = "姓名";worksheet.Cell("A1").Style.Font.Bold = true;worksheet.Cell("A1").Style.Fill.SetBackgroundColor(XLColor.Gray);worksheet.Cell("B1").Value = "年龄";worksheet.Cell("B1").Style.Font.Bold = true;worksheet.Cell("B1").Style.Fill.SetBackgroundColor(XLColor.Gray);worksheet.Cell("C1").Value = "地址";worksheet.Cell("C1").Style.Font.Bold = true;worksheet.Cell("C1").Style.Fill.SetBackgroundColor(XLColor.Gray);var table = worksheet.Cell("A2").InsertData(list);workbook.SaveAs("D:\\listDemo.xlsx");}}

4.3 添加图片

代码语言:javascript

复制

        /// <summary>/// 插入图片/// </summary>private static void InsertImage(){using (var workbook = new XLWorkbook()){var worksheet = workbook.Worksheets.Add("Sheet1");worksheet.AddPicture("D:\\1.png") .MoveTo(worksheet.Cell(1, 1));            workbook.SaveAs("D:\\imageDemo.xlsx");}}

4.4 大批量导出

代码语言:javascript

复制

 /// <summary>/// 大批量插入list 20万条记录时间5.9秒/// </summary>private static void BatchInsertList(){Stopwatch stopwatch = new Stopwatch();stopwatch.Start();List<UserInfo> list = new List<UserInfo>();for (int i = 0; i < 200000; i++){list.Add(new UserInfo{name = "小明"+i,age = 30,address = "北京"});}        using (var workbook = new XLWorkbook()){var worksheet = workbook.Worksheets.Add("Sheet1");// 设置列头worksheet.Cell("A1").Value = "姓名";worksheet.Cell("A1").Style.Font.Bold = true;worksheet.Cell("A1").Style.Fill.SetBackgroundColor(XLColor.Gray);worksheet.Cell("B1").Value = "年龄";worksheet.Cell("B1").Style.Font.Bold = true;worksheet.Cell("B1").Style.Fill.SetBackgroundColor(XLColor.Gray);worksheet.Cell("C1").Value = "地址";worksheet.Cell("C1").Style.Font.Bold = true;worksheet.Cell("C1").Style.Fill.SetBackgroundColor(XLColor.Gray);var table = worksheet.Cell("A2").InsertData(list);workbook.SaveAs("D:\\batchListDemo.xlsx");}stopwatch.Stop();// 获取代码执行时间TimeSpan elapsedTime = stopwatch.Elapsed;// 输出执行时间Console.WriteLine("10万条数据导出执行时间: {0}", elapsedTime.TotalSeconds+" 秒");Console.ReadKey(); }

五、总结

总之,ClosedXML是一个功能强大、易于使用、性能优越的.NET Excel库,适用于各种Excel应用程序的开发。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/858170.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux Ubuntu C语言开发环境设置和相关资料

1. 安装编译所需的包 sudo apt install build-essential 2. The GNU C Library, C语言库函数的源代码下载 https://sourceware.org/glibc/ 3. C语言库函数文档 官方文档 The GNU C Library 4. ASCII码表 ASCII table - Table of ASCII codes, characters and symbols

STL迭代器的应用

STL迭代器的应用 迭代器的定义方法&#xff1a; 类型作用定义方式正向迭代器正序遍历STL容器容器类名::iterator 迭代器名常量正向迭代器以只读方式正序遍历STL容器容器类名::const_iterator 迭代器名反向迭代器逆序遍历STL容器容器类名::reverse_iterator 迭代器名常量反向迭…

使用Spring Boot构建全栈应用程序:从理论到实践

文章目录 引言第一章 项目初始化1.1 使用Spring Initializr生成项目1.2 创建基本项目结构 第二章 后端服务开发2.1 定义实体类2.2 创建Repository接口2.3 实现Service类2.4 创建Controller类 第三章 前端集成3.1 使用Thymeleaf模板引擎3.2 创建前端控制器 第四章 安全配置4.1 S…

如何解决vue中的路由守卫失效问题

引言 1. 路由守卫简介 路由守卫是前端开发中一个至关重要的概念&#xff0c;特别是在使用单页应用&#xff08;SPA&#xff09;框架如React、Vue或Angular时。它们充当了SPA中的“门卫”&#xff0c;控制着用户对不同页面的访问权限。路由守卫的核心功能是确保用户在访问特定…

迅狐多商户直播商城系统源码:电商领域的创新融合

随着直播技术的兴起和电子商务的蓬勃发展&#xff0c;迅狐多商户直播商城系统源码应运而生&#xff0c;为商家和消费者提供了一个全新的互动购物平台。 多商户直播商城系统源码概述 迅狐多商户直播商城系统源码是一个高度集成的解决方案&#xff0c;它结合了直播的即时性和电…

C语言的数据结构:树与二叉树(树篇)

前言 之前所学到的数据结构都是线性结构特征&#xff0c;所谓线性就是在结构上&#xff0c;将节点连接起来时&#xff0c;像一条线一样。如链表则是上一个节点包含下一个节点地址的指针&#xff0c;这样依次下去。而串、队列、栈则实现方式都依赖于链表或顺序表而实现&#xf…

如何调用 `qDebug` 而不附加空格和换行?

问题背景 在使用 C/Qt 的打印函数 qDebug 时&#xff0c;有时候需要控制其默认添加的空格和换行。通过一个简单的例子来说明&#xff1a; QString var1("some string"); int var2 1; qDebug() << var1 << "" << var2;输出将会是&…

报错:mAP数据为0%+无法读取output里的图片红色警告

debug检查&#xff1a;发现创建的output和input的路径不在同一级 操作1&#xff1a;修改output创建路径为绝对路径后&#xff0c;output和input文件成功在同一级&#xff0c;但问题仍存在 debug检测&#xff1a;识别的类别和保存的类别不同&#xff0c;没有保存数据 操作2&…

文件夹或文件已在另一程序中打开,找句柄发现是explorer.exe如何解决

1.找到句柄&#xff1a;ctrl alt del打开任务资源管理器 2.注意是选择CPU -> 关联的句柄&#xff0c;而不是概述 如果发现只有explorer.exe&#xff0c;那肯定是不对的&#xff0c;我们先shfit一个一个删除&#xff0c;发现哪个删不掉&#xff0c;再在这里找句柄&#xff0c…

用AI打败AI,利用ai指令对头条文章进行查重测试,结果出乎意料

前言&#xff1a;现在的ai真的太火爆了&#xff0c;让人不得不感叹ai的神奇之处&#xff0c;让我们一起来探讨下ai的强大之处吧&#xff01;本文仅限学习研究。 背景&#xff1a;最近看到很多人用ai写文章&#xff0c;然后被头条判定为疑似ai生成&#xff0c;所以想研究学习下…

NodeJs 使用中间件实现日志生成功能

写在前面 今天我们实现一个记录 nodejs 服务请求日志的功能&#xff0c;大概的功能包括请求拦截&#xff0c;将请求的信息作为日志文件的内容写入到 txt 文件中&#xff0c;然后输出到指定的日志到当天日期目录中&#xff0c;从而实现后续查找用户请求信息的功能&#xff0c;下…

【深度学习实战(40)】可变形卷积

一、可变形卷积&#xff08;DCN/DConv&#xff09; (a)是普通的卷积操作 (b)、©、(d)是可变形卷积&#xff08;deformable convolution&#xff0c;即DConv&#xff09; 可变形卷积实际是指标准卷积操作中采样位置增加了一个偏移量offset&#xff0c;这样卷积核就能在训…

在 Oracle Linux 8.9 上安装 FFmpeg 的完整指南

在 Oracle Linux 8.9 上安装 FFmpeg 的完整指南 在 Oracle Linux 8.9 上安装 FFmpeg 的完整指南准备工作安装步骤1. 更新系统2. 启用 EPEL 仓库3. 启用 RPM Fusion 仓库4. 安装 DNF 插件核心包5. 启用 CodeReady Builder 仓库6. 安装 FFmpeg7. 验证安装 可能遇到的问题注意事项…

原码、反码和补码详细集合

目录 一.什么是原码&#xff0c;反码&#xff0c;补码&#xff1f; 1&#xff09;.原码&#xff08;true form&#xff09;&#xff1a; 2&#xff09;.反码&#xff1a; 3&#xff09;.补码&#xff1a; 二.为什么要有原码&#xff0c;反码&#xff0c;补码 一.什么是原…

[rejected]master -> master (non-fast-forward)的解决方法

☆ 问题描述 [rejected]master -> master (non-fast-forward)的解决方法 本地已经创建了一个项目&#xff0c;想要把远程库的代码合并到本地库上&#xff0c;报错… ★ 解决方案 git pull <远程服务器> <远程分支> --allow-unrelated-histories 先使用这个代…

[最全]设计模式实战(总序)

最近一段时间,读完了《Android源码设计模式-解析与实战》和《大话设计模式》这两本经典设计模式相关书籍,撰写相关笔记。 每种设计模式将从以下方式聊聊: 1. 是什么(What,即定义);解决什么问题(Why,即使用场景) 2. 如何使用(How,即最简UML图+Java代码) 3. 生活…

npm 安装踩坑

1 网络正常&#xff0c;但是以前的老项目安装依赖一直卡住无法安装&#xff1f;哪怕切换成淘宝镜像 解决办法&#xff1a;切换成yarn (1) npm i yarn -g(2) yarn init(3) yarn install在安装的过程中发现&#xff1a; [2/4] Fetching packages... error marked11.1.0:…

企业供应链数字化转型如何做?让企业盈利能力增强再飞一会

引言&#xff1a;企业供应链数字化转型是外部环境变化、内部需求驱动、数字化转型的必要性和技术进步的推动共同作用的结果。供应链数字化转型可以通过数据整合、自动化、协同工作等方式提高供应链的效率和降低成本&#xff0c;例如&#xff0c;使用数字化技术可以实现快速采购…

Studying-代码随想录训练营day14| 226.翻转二叉树、101.对称二叉树、104.二叉树的最大深度、111.二叉树的最小深度

第十四天&#xff0c;(ง •_•)ง&#x1f4aa;&#x1f4aa;&#xff0c;编程语言&#xff1a;C 目录 226.翻转二叉树 101.对称二叉树 100.相同的树 572.另一个树的子树 104.二叉树的最大深度 559.n叉树的最大深度 111.二叉树的最小深度 总结 226.翻转二叉树 文档讲…

【八】【QT开发应用】QTcreate项目打包成.exe文件或.apk文件,EnigmaVirtualBox软件下载,虚拟网站代打开QT应用

EnigmaVirtualBox下载 Enigma Virtual Box QTcreate项目打包成.exe可执行文件 找到自己写好的项目的.exe文件 将这个文件复制到一个新的文件夹里面 在这个新的文件夹里面打开cmd,这样可以使得cmd直接进入到该文件夹 打包.exe命令行 输入下面的命令行 windeployqt game…