开发过程中,经常会遇到导入导出数据的需求,本篇博客介绍在.NET Core中如何使用EPPlus组件导入导出Excel

EPPlus:

EPPlus是使用Open Office XML格式(xlsx)读写Excel 2007/2010文件的 .net 开发库,能读写Excel 2007/2010文件,可以运行在Windows, Linux和Mac,官网地址:https://archive.codeplex.com/

在.net core中还可以使用NOPI操作Excel,在此不做介绍。

使用EPPlus操作Excel:

1、引入EPPlus包,在程序包管理控制台中执行命令安装依赖包:

1 PM> Install-Package EPPlus.Core -Version 1.5.4

2、导出Excel

①使用EF Core操作数据库时,数据源用List集合方便导出。

②在控制器的构造函数中注入 IHostingEnvironment 来获取网站根目录路径,以便设置导出Excel文件路径。

1 public IActionResult OutputExcel()2{3 //数据源为list集合

4 var query = (from u in_context.UserInfo5 select new

6 {7 u.UId,8 u.UName,9 u.UPws,10 u.UEmail,11 u.UTel12 }).ToList();13 //指定导出Excel文件路径

14 string sWebRootFolder =_hostingEnv.WebRootPath;15 //文件名

16 string sFileName = $@"测试导出{DateTime.Now.ToString("yyyyMMddHHmmss")}.xlsx";17 //将两个字符串合并为一个路径

18 var path =Path.Combine(sWebRootFolder, sFileName);19 //创建文件对象

20 FileInfo file = newFileInfo(path);21 //如果文件存在

22 if(file.Exists)23 {24 //删除文件

25 file.Delete();26 //重新创建文件对象

27 file = newFileInfo(path);28 }29 //创建ExcelPackage对象

30 using (ExcelPackage package = newExcelPackage(file))31 {32 //添加新工作表到工作簿

33 ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("UserInfo");34 //将list集合加载到工作表中,打印表头

35 worksheet.Cells.LoadFromCollection(query, true);36 //保存Excel

37 package.Save();38 }//释放资源

39 return View("Index");40}

ExcelPackage类是EPPlus的入口类,解析一个Excel文件,生成ExcelWorkbook对象来表示一个Excel。

ExcelPackage类实现了IDisposable接口,可以使用using进行对象释放。

ExcelWorksheet类可设置Excel表格样式,但设置Excel表格样式会增加内存负担,导出速度可能会变慢。

3、导入Excel

导入,导出Excel方法,博主都使用Ajax请求,在导入Excel时,将文件路径传入后台时出现fackpath路径问题,后直接先将导入的文件保存在程序根目录中,然后再导入程序根目录中的文件

JavaScript代码:

1 $("#IExcel").click(function() {2 var formdata = new FormData();//通过FormData构造函数创建一个空对象

3 formdata.append('file', $("#Import")[0].files[0]);//通过append()方法来追加数据

4 $.ajax({5 type: "post",6 url: "/Main/ImportExcel",7 contentType: false,//不要去设置Content-Type请求头

8 processData: false,//不要去处理发送的数据

9 data: formdata,10 success: function(data) {11 alert(data.message);12 },13 error: function() {14 alert("导入失败!");15 }16 })17})

在使用FormData对象传输数据时,须设置浏览器不要去处理发送的数据和设置Content-Type请求头,否则JS将报错:Uncaught TypeError: Illegal invocation

C#代码:

1 publicIActionResult ImportExcel()2{3 try

4 {5 //先将要导入的文件上传到程序根目录6 //获取前端传过来的文件

7 var files =Request.Form.Files;8 var filePath = "";9 foreach (var item infiles)10 {11 //获取文件名

12 filePath =item.FileName;13 //指定文件上传路径

14 filePath = _hostingEnv.WebRootPath + $@"\{filePath}";15 //创建文件流

16 using (FileStream fs =System.IO.File.Create(filePath))17 {18 //将上载文件的内容复制到目标流

19 item.CopyTo(fs);20 //清除此流的缓冲区并导致将任何缓冲数据写入

21 fs.Flush();22 }23 }24 //创建文件对象

25 FileInfo file = newFileInfo(filePath);26 if (file != null)27 {28 //创建ExcelPackage对象

29 using (ExcelPackage package = newExcelPackage(file))30 {31 //访问Excel表中的第一张表

32 ExcelWorksheet worksheet = package.Workbook.Worksheets[1];33 //获取表格的行数

34 int rowCount =worksheet.Dimension.Rows;35 //获取表格的列数

36 int ColCount =worksheet.Dimension.Columns;37 var user = new List();38 for (int row = 1; row <= rowCount; row++)39 {40 UserInfo userinfo = newUserInfo();41 //指定行列赋值

42 userinfo.UName = worksheet.Cells[row, 2].Value.ToString();43 userinfo.UPws = worksheet.Cells[row, 3].Value.ToString();44 userinfo.UEmail = worksheet.Cells[row, 4].Value.ToString();45 userinfo.UTel = worksheet.Cells[row, 5].Value.ToString();46 //将数据保存到实体中

47 _context.UserInfo.Add(userinfo);48 _context.SaveChanges();49 }50 return Json(new { message = "导入成功!"});51 }52 }53 return null;54 }55 catch(Exception ex)56 {57 return Json(new { message = "导入失败!" +ex });58 }59}

ExcelWorkbook类表示了一个Excel文件,其Worksheets属性对应着Excel的各个Sheet。Worksheets属性会自动创建,不用担心空指针异常,但是其Count可能为0。注意:在获取具体的Sheet时,索引号从1开始。

End!

epplus保存为流_ASP.NET Core使用EPPlus导入导出Excel相关推荐

  1. epplus保存为流_.NET Core 2从内存流下载Excel文件 - c#

    我当时在.NET Core项目中工作,当时我应该从记录创建电子表格文件并下载它而不将其保存在服务器中.搜索上述标题并没有多大帮助,但给出了一些指示.另外,ASP.NET中使用的大多数方法在.NET C ...

  2. ASP.NET Core 导入导出Excel xlsx 文件

    ASP.NET Core 使用EPPlus.Core导入导出Excel xlsx 文件,EPPlus.Core支持Excel 2007/2010 xlsx文件导入导出,可以运行在Windows, Li ...

  3. epplus保存为流_通过EPPlus导出Excel文件

    小弟刚刚走上工作岗位不久,工作中常常遇到要导出Excel的情况,但感觉两种常见的导出方式(一种是通过GridView,另一种是通过微软的COM组 件)都不是很理想,前者导出的灵活度太低,后者又常常出现 ...

  4. epplus保存为流_C# 使用EPPlus 秒导出10万条数据

    //导出Excel protected void BtnMemExcel_Click(objectsender, EventArgs e) { Mem bllMember= newMem();int ...

  5. .NET Core 中导入导出Excel

    操作Excel是一个比较常见的业务场景,本篇将使用EPPlus简单演示一个导入导出的示例. EPPlus开源地址:https://github.com/EPPlusSoftware/EPPlus 在项 ...

  6. epplus保存为流_c# – 另存为使用EPPlus?

    有没有人知道如何使用package.Saveas函数? package.SaveAs(tempFolderPathAlt + saveas + ".xlsx"); 目前这是红色的下 ...

  7. .NET CORE 2.1 导出excel文件的两种方法

    最近在做 MVC 项目的时候遇到项目的导出,下面总结下两种导出到excel 的方法 第一种方法: 将文件写到本地,然后返回这个File 或者返回这个 File 的绝对地址  其中  _hostingE ...

  8. FFMPEG保存H264流到AVI文件中形成录像

    研究了使用FFMPEG保存H264流到AVI文件中形成录像的方法,下面是大致流程. 使用的FFMPEG版本   ffmpeg-2.6.9.然后我静态编译后使用的静态库,至于怎么静态编译看我之前的文章. ...

  9. .NET Core(C#) EPPlus创建Excel(.xlsx)写入数据的方法及示例代码

    EPPlus是一个使用Open Office XML(Xlsx)文件格式,能读写Excel(.xlsx)文件的开源组件.本文主要介绍.NET Core(C#)中使用EPPlus创建Excel(.xls ...

最新文章

  1. 详解LINUX 的DHCP服务
  2. Retinaface c++
  3. 邓侃:深度强化学习“深”在哪里?
  4. Pavel and Triangles(贪心)
  5. 关于UI Automation框架
  6. ios多线程 -- NSOperation 简介
  7. 【LeetCode笔记】322. 零钱兑换(Java、动态规划)
  8. Struts2 过滤器与拦截器
  9. mysql主主同步稳定吗_MySQL主主同步
  10. 去除程序名称 去除程序属性详细信息中的程序名称 创建时间等信息
  11. Direct2D教程(七)单色画刷
  12. java采购系统_java采购申请系统
  13. json数组转java集合
  14. 领域驱动架构(DDD)建模中的模型到底是什么?
  15. 南京大学生租房补贴申领必看
  16. php爬取金山词霸发音,php金山词霸api
  17. 使用rimraf一秒删除node_modules文件夹【亲测有用】
  18. Mobile2.0不对等的战争
  19. Linux之mount以rw,remount重新挂载ext4文件系统(二十八)
  20. 面试官最想听哪些话?

热门文章

  1. 智能合约开发以及调用过程的注意事项
  2. 全职三年 我又上班了
  3. java正则表达式匹配字符串_java正则表达式如何匹配字符串
  4. 用c语言调用Easy X实现图像的输出,附带音乐的读取
  5. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)
  6. 使用Selenium爬取前程无忧网站最新发布的前五页招聘信息
  7. div2#730题解
  8. nginx正向代理+反向代理
  9. 微信分享网站链接显示缩略图和描述的方法
  10. python随机字符串生成