NET 5 Execl导入数据处理(EppLus、NPOI、Npoi.Mapper)

您所在的位置:网站首页 npoi导出excel百万条数据 NET 5 Execl导入数据处理(EppLus、NPOI、Npoi.Mapper)

NET 5 Execl导入数据处理(EppLus、NPOI、Npoi.Mapper)

2023-11-02 04:36| 来源: 网络整理| 查看: 265

先来简单介绍下市面上最广泛常见的三种操作excel库的优缺点1.NPOI

优点:免费开源,无需装Office即可操作excel, 支持处理的文件格式包括xls, xlsx, docx.格式

缺点:不支持大数据量以及多sheet的导出

2.Aspose.Cells

优点:支持大数据量以及多sheet的导出,提供了应有尽有的文件格式支持,速度快性能佳

缺点:除了收费几乎没有缺点,试用版 限制打开文件数量100个,限制使用Aspose.Cells.GridWeb功能,生成的Excel会有水印

3.EPPlus优点:开源免费,不需要安装office,支持图表的列印,导入导出速度快,支持高版本Excel格式,可以实现Excel上的各种基本功能

唯一缺点:仅支持xlsx格式,不支持古老的xlsx

基于业务需求和各大库优缺点对比,尽量选择合适业务需求的库,个人比较推荐的是EPPlus

本文使用的是EPPlus包来实现数据的导出,因为5.0以上的版本需要商业授权码,所以使用的是4.5.3.3的的版本

项目也是基于最新版本的.net core 3.1 web api

右键管理NuGet包添加EPPlus 选择版本添加项目引用然后代码附上

创建excel导入帮助类Export2Excel.cs,为了使所有的地方通用,通过list泛型参数 传入数据源以及需要导出的字段标题,返回byte[],以便直接写入文件流,也提供了基于DataTable 的操作

1、Excel .xls 和 .xlsx 有什么区别?# 区别如下: 1、文件格式不同。.xls 是一个特有的二进制格式,其核心结构是复合文档类型的结构,而.xlsx 的核心结构是 XML 类型的结构, 采用的是基于 XML 的压缩方式,使其占用的空间更小。.xlsx 中最后一个 x 的意义就在于此。 2、版本不同。.xls是excel2003及以前版本生成的文件格式,而.xlsx是excel2007及以后版本生成的文件格式。 3、兼容性不同。.xlsx格式是向下兼容的,可兼容.xls格式。 2、一号种子选手(EppLus)# EPPlus是一个使用Open Office XML(xlsx)文件格式,能读写Excel 2007/2010 文件的开源组件, 在导出Excel的时候不需要电脑上安装office,官网为:http://epplus.codeplex.com/。 基本上Excel上的各种功能(例如图表、VBA、数据透视表、加密、数据验证等)Epplus都能实现, 它的一个缺点就是不支持导出2003版的Excel,也就是.XLS文件。 2.1 EppLus实现# (1)添加包 EPPlus (注意:EPPlus.Core已弃用) (2)Execl导入数据使用EPPlus处理实例: /// /// 获取Exel批量用户数据(EppLus) /// /// /// /// public List GetBatchUsersData(HttpContext context,out string msg) { msg = "数据处理成功"; // 获取上传文件后缀 var extension = Path.GetExtension(context.Request.Form.Files[0].FileName).ToUpper(); if(!extension.Contains("XLSX")) { msg = "文件格式不正确,只支持XLSX文件"; return null; } // 限制单次只能上传5M float fileSize = context.Request.Form.Files[0].Length / 1024 / 1024; if(fileSize > 5) { msg = "文件大小超过限制"; return null; } try { Stream stream = context.Request.Form.Files[0].OpenReadStream(); using (var package = new ExcelPackage(stream)) { // 获取Exel指定工作簿,"Sheet1"也可以用索引代替 ExcelWorksheet worksheet = package.Workbook.Worksheets["Sheet1"]; // 获取数据行数 int RowNum = worksheet.Dimension.Rows; // 待处理数据存储列表 List usersData = new List(); // 获取每行数据 for (int row = 1; row 5) { msg = "文件大小超过限制"; return null; } try { // 文件流处理 MemoryStream ms = new MemoryStream(); file.CopyTo(ms); ms.Seek(0, SeekOrigin.Begin); // 根据Excel版本进行处理 IWorkbook workbook = ext == ".xls" ? (IWorkbook)new HSSFWorkbook(ms) : new XSSFWorkbook(ms); // 获取Excel第一张工作簿 ISheet sheet = workbook.GetSheetAt(0); // 获取数据行数 int num = sheet.LastRowNum; // 待处理用户数据 List users = new List(); for (int i = 1; i 0) propertyInfos = dtSource[0].GetType().GetProperties(); //数据行 for (int i = 0, sourceCount = dtSource.Count(); i < sourceCount; i++) { curRowIndex++; for (var j = 0; j < maxColumnCount; j++) { var column = columns.ExportColumnList[j]; var cell = workSheet.Cells[curRowIndex, j + 1]; foreach (var propertyInfo in propertyInfos) { if (column.Field == propertyInfo.Name) { object value = propertyInfo.GetValue(dtSource[i]); var pType = propertyInfo.PropertyType; pType = pType.Name == "Nullable`1" ? Nullable.GetUnderlyingType(pType) : pType; if (pType == typeof(DateTime)) { cell.Style.Numberformat.Format = "yyyy-MM-dd hh:mm"; cell.Value = Convert.ToDateTime(value); } else if (pType == typeof(int)) { cell.Style.Numberformat.Format = "#0"; cell.Value = Convert.ToInt32(value); } else if (pType == typeof(double) || pType == typeof(decimal)) { if (column.Precision != null) cell.Style.Numberformat.Format = "#,##0.00";//保留两位小数 cell.Value = Convert.ToDouble(value); } else { cell.Value = value == null ? "" : value.ToString(); } } } } } workSheet.Cells[workSheet.Dimension.Address].Style.Font.Name = "宋体"; workSheet.Cells[workSheet.Dimension.Address].AutoFitColumns();//自动填充 for (var i = 1; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3