• C#使用EPPlus操作Excel(读写)


    之所以使用EPPlus操作Excel是因为微软自带的运行效率太低,数据多后会特别慢,不能满足现场要求。如果想速度快,而且只是读取Excel的配置还有另一个办法就是将Excel保存成xml文件参考我的另一个文章:C# 读取XML格式的Excel文件

    以前项目中会在Excel中配置参数后,加载动态显示到界面中,动态显示参考我的文章:C# 使用FlowLayoutPanel动态显示_花开莫与流年错_的博客-CSDN博客

    百度搜常见的有ERRlus和NPOI,NPOI支持多一点性能差一点

    1、下载依赖。在引用》管理NuGet中输入》EPPlus

    安装如下第一个搜索结果

    2、示例代码

    1. using OfficeOpenXml;
    2. using System;
    3. using System.Diagnostics;
    4. using System.IO;
    5. using System.Linq;
    6. using System.Text;
    7. using System.Threading.Tasks;
    8. namespace Study_CSharp
    9. {
    10. class MyExcelByEPPlus
    11. {
    12. public void Test()
    13. {
    14. Stopwatch watch = new Stopwatch();
    15. watch.Start();
    16. string path = Directory.GetCurrentDirectory() + @"\" + @"file.xlsx";
    17. FileInfo file = new FileInfo(path);
    18. ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
    19. using (var package = new ExcelPackage(file))
    20. {
    21. string sheetName = "hello";
    22. var sheet = package.Workbook.Worksheets.Where(x => x.Name == sheetName).FirstOrDefault();
    23. if (sheet == null)
    24. {
    25. sheet = package.Workbook.Worksheets.Add(sheetName);
    26. }
    27. sheet.Cells[1, 2].Value = "lalala"; // 第一行、第二列
    28. //sheet.SetValue(1, 2, "EPPlus value");
    29. sheet.InsertRow(3, 4);
    30. package.Save();
    31. }
    32. watch.Stop();
    33. Console.WriteLine($"Time is {watch.ElapsedMilliseconds} ms");
    34. Console.ReadLine();
    35. }
    36. }
    37. }

    运行报错处理

    1、错误:OfficeOpenXml.LicenseException:“Please set the ExcelPackage.LicenseContext

    1. ExcelPackage.LicenseContext = LicenseContext.NonCommercial; // 添加这行代码后不会报ExcelPackage错误
    2. using (var p = new ExcelPackage()){}

    2、错误:System.InvalidOperationException:“序列不包含任何元素”

    1. // 会报错的函数是这样的
    2. var sheet = package.Workbook.Worksheets.Where(x => x.Name == "hello").First();
    3. // 原因是因为使用First的时候至少必须有一条数据,使用Single查询的时候查询结果必须有且只有一条数据,如果没有查到任何数据就会报上面异常。
    4. // 解决办法:使用FirstOrDefault和SingleOrDefault,如果没有数据的话,返回对应类型的默认值.
    5. var sheet = package.Workbook.Worksheets.Where(x => x.Name == "hello").FirstOrDefault();

    3、sheet.SetValue(1, 1, "EPPlus value");报错:System.NullReferenceException:“未将对象引用设置到对象的实例。”

    是因为上面的返回的sheet还是空,需要在上面加判断如果为空则添加sheet

  • 相关阅读:
    Mac的入坑指南
    深入理解计算机系统(CSAPP) —— 第二章 信息的表示和处理
    Java——》对象如何进行拷贝
    2022年全球市场文拉法辛原料药总体规模、主要生产商、主要地区、产品和应用细分研究报告
    消息队列-RabbitMQ
    正点原子嵌入式linux驱动开发——Linux LCD驱动
    贪心算法 题型总结
    介绍 TensorFlow 的基本概念和使用场景
    大家都能看得懂的源码 - ahooks useSet 和 useMap
    程序员积累的编程知识十年后有多少变得没用?
  • 原文地址:https://blog.csdn.net/qq_17242837/article/details/127989248