当前位置:   article > 正文

C#使用EPPlus操作Excel(读写)_officeopenxml.licenseexception:鈥淧lease set the exc

officeopenxml.licenseexception:鈥淧lease set the excelpackage.licensecontext

之所以使用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

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/118548
推荐阅读
相关标签
  

闽ICP备14008679号