前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C#实战:ClosedXML 强大性能揭秘,20 万条数据,5 秒搞定导出

C#实战:ClosedXML 强大性能揭秘,20 万条数据,5 秒搞定导出

原创
作者头像
IT技术分享社区
发布2024-01-17 11:14:26
1.2K4
发布2024-01-17 11:14:26
举报
文章被收录于专栏:C#实战IT技术分享社区C#实战

一、类库介绍

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应用程序的开发。

我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、类库介绍
  • 二、安装方式
    • 2.1 直接nuget搜索安装
      • 2.2 命令行安装方式
      • 三、性能测试
      • 3.1 保存性能
      • 3.2 读取性能
      • 四、测试案例
        • 4.1 直接插入DataTable
          • 4.2 直接插入list
            • 4.3 添加图片
              • 4.4 大批量导出
              • 五、总结
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档