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

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

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

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

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

C#使用EPPlus操作Excel(读写)_第1张图片

安装如下第一个搜索结果

C#使用EPPlus操作Excel(读写)_第2张图片

2、示例代码

using OfficeOpenXml;
using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Study_CSharp
{
    class MyExcelByEPPlus 
    {
        public void Test()
        {
            Stopwatch watch = new Stopwatch();
            watch.Start();
            string path = Directory.GetCurrentDirectory() + @"\" + @"file.xlsx";
            FileInfo file = new FileInfo(path);
            ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
            using (var package = new ExcelPackage(file))
            {
                string sheetName = "hello";
                var sheet = package.Workbook.Worksheets.Where(x => x.Name == sheetName).FirstOrDefault();
                if (sheet == null)
                {
                    sheet = package.Workbook.Worksheets.Add(sheetName);
                }
                sheet.Cells[1, 2].Value = "lalala";         // 第一行、第二列
                //sheet.SetValue(1, 2, "EPPlus value");
                sheet.InsertRow(3, 4);
                package.Save();
            }
            watch.Stop();
            Console.WriteLine($"Time is {watch.ElapsedMilliseconds} ms");
            Console.ReadLine();
        }
    }
}

运行报错处理

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

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

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

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

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

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

你可能感兴趣的:(C#,c#,excel,EPPlus,读Excel,写Excel)