• 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

    复制

    1. /// <summary>
    2. /// 插入DataTable
    3. /// </summary>
    4. private static void InsertDataTable()
    5. {
    6. // 创建一个新的 DataTable 对象
    7. DataTable dataTable = new DataTable();
    8. // 定义表的列
    9. dataTable.Columns.Add("ID", typeof(int));
    10. dataTable.Columns.Add("Name", typeof(string));
    11. dataTable.Columns.Add("Age", typeof(int));
    12. // 添加数据行
    13. dataTable.Rows.Add(1, "John", 25);
    14. dataTable.Rows.Add(2, "Alice", 30);
    15. dataTable.Rows.Add(3, "Bob", 40);
    16. using (var workbook = new XLWorkbook())
    17. {
    18. var worksheet = workbook.Worksheets.Add("Sheet1");
    19. worksheet.FirstCell().InsertTable(dataTable);
    20. workbook.SaveAs("D:\\tableDemo.xlsx");
    21. }
    22. }

    4.2 直接插入list

    代码语言:javascript

    复制

    1. /// <summary>
    2. /// 插入list
    3. /// </summary>
    4. private static void InsertList()
    5. {
    6. List<UserInfo> list = new List<UserInfo>();
    7. list.Add(new UserInfo
    8. {
    9. name = "小明",
    10. age = 30,
    11. address = "北京"
    12. });
    13. list.Add(new UserInfo
    14. {
    15. name = "小李",
    16. age = 20,
    17. address = "郑州"
    18. });
    19. list.Add(new UserInfo
    20. {
    21. name = "小强",
    22. age = 26,
    23. address = "上海"
    24. });
    25. using (var workbook = new XLWorkbook())
    26. {
    27. var worksheet = workbook.Worksheets.Add("Sheet1");
    28. // 设置列头
    29. worksheet.Cell("A1").Value = "姓名";
    30. worksheet.Cell("A1").Style.Font.Bold = true;
    31. worksheet.Cell("A1").Style.Fill.SetBackgroundColor(XLColor.Gray);
    32. worksheet.Cell("B1").Value = "年龄";
    33. worksheet.Cell("B1").Style.Font.Bold = true;
    34. worksheet.Cell("B1").Style.Fill.SetBackgroundColor(XLColor.Gray);
    35. worksheet.Cell("C1").Value = "地址";
    36. worksheet.Cell("C1").Style.Font.Bold = true;
    37. worksheet.Cell("C1").Style.Fill.SetBackgroundColor(XLColor.Gray);
    38. var table = worksheet.Cell("A2").InsertData(list);
    39. workbook.SaveAs("D:\\listDemo.xlsx");
    40. }
    41. }

    4.3 添加图片

    代码语言:javascript

    复制

    1. /// <summary>
    2. /// 插入图片
    3. /// </summary>
    4. private static void InsertImage()
    5. {
    6. using (var workbook = new XLWorkbook())
    7. {
    8. var worksheet = workbook.Worksheets.Add("Sheet1");
    9. worksheet.AddPicture("D:\\1.png") .MoveTo(worksheet.Cell(1, 1));
    10. workbook.SaveAs("D:\\imageDemo.xlsx");
    11. }
    12. }

    4.4 大批量导出

    代码语言:javascript

    复制

    1. /// <summary>
    2. /// 大批量插入list 20万条记录时间5.9
    3. /// </summary>
    4. private static void BatchInsertList()
    5. {
    6. Stopwatch stopwatch = new Stopwatch();
    7. stopwatch.Start();
    8. List<UserInfo> list = new List<UserInfo>();
    9. for (int i = 0; i < 200000; i++)
    10. {
    11. list.Add(new UserInfo
    12. {
    13. name = "小明"+i,
    14. age = 30,
    15. address = "北京"
    16. });
    17. }
    18. using (var workbook = new XLWorkbook())
    19. {
    20. var worksheet = workbook.Worksheets.Add("Sheet1");
    21. // 设置列头
    22. worksheet.Cell("A1").Value = "姓名";
    23. worksheet.Cell("A1").Style.Font.Bold = true;
    24. worksheet.Cell("A1").Style.Fill.SetBackgroundColor(XLColor.Gray);
    25. worksheet.Cell("B1").Value = "年龄";
    26. worksheet.Cell("B1").Style.Font.Bold = true;
    27. worksheet.Cell("B1").Style.Fill.SetBackgroundColor(XLColor.Gray);
    28. worksheet.Cell("C1").Value = "地址";
    29. worksheet.Cell("C1").Style.Font.Bold = true;
    30. worksheet.Cell("C1").Style.Fill.SetBackgroundColor(XLColor.Gray);
    31. var table = worksheet.Cell("A2").InsertData(list);
    32. workbook.SaveAs("D:\\batchListDemo.xlsx");
    33. }
    34. stopwatch.Stop();
    35. // 获取代码执行时间
    36. TimeSpan elapsedTime = stopwatch.Elapsed;
    37. // 输出执行时间
    38. Console.WriteLine("10万条数据导出执行时间: {0}", elapsedTime.TotalSeconds+" 秒");
    39. Console.ReadKey();
    40. }

    五、总结

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

  • 相关阅读:
    多模态 —— Learnable pooling with Context Gating for video classification
    特殊矩阵的压缩存储(对称矩阵,三角矩阵和三对角矩阵)
    数据库索引的基本操作(sql语句)
    Nginx配置HTTPS协议
    JAVA计算机毕业设计小型企业员工工资管理系统(附源码、数据库)
    GAT-图注意力模型
    java版工程管理系统Spring Cloud+Spring Boot+Mybatis实现工程管理系统源码
    matlab根轨迹绘制
    工程制图直线投影练习
    Python安装教程
  • 原文地址:https://blog.csdn.net/mudh118/article/details/139893948