开发过程中,经常会遇到导入导出数据的需求,本篇博客介绍在.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包,在程序包管理控制台中执行命令安装依赖包:

 PM> Install-Package EPPlus.Core -Version 1.5.

2、导出Excel

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

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

 public IActionResult OutputExcel()
2 {
3 //数据源为list集合
4 var query = (from u in _context.UserInfo
select new
{
u.UId,
u.UName,
u.UPws,
u.UEmail,
u.UTel
}).ToList();
//指定导出Excel文件路径
string sWebRootFolder = _hostingEnv.WebRootPath;
//文件名
string sFileName = $@"测试导出{DateTime.Now.ToString("yyyyMMddHHmmss")}.xlsx";
//将两个字符串合并为一个路径
var path = Path.Combine(sWebRootFolder, sFileName);
//创建文件对象
FileInfo file = new FileInfo(path);
//如果文件存在
if (file.Exists)
{
//删除文件
file.Delete();
//重新创建文件对象
file = new FileInfo(path);
}
//创建ExcelPackage对象
using (ExcelPackage package = new ExcelPackage(file))
{
//添加新工作表到工作簿
ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("UserInfo");
//将list集合加载到工作表中,打印表头
worksheet.Cells.LoadFromCollection(query, true);
//保存Excel
package.Save();
}//释放资源
return View("Index");
40 }

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

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

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

3、导入Excel

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

JavaScript代码:

 $("#IExcel").click(function () {
var formdata = new FormData();//通过FormData构造函数创建一个空对象
formdata.append('file', $("#Import")[0].files[0]);//通过append()方法来追加数据
$.ajax({
type: "post",
url: "/Main/ImportExcel",
contentType: false,//不要去设置Content-Type请求头
processData: false,//不要去处理发送的数据
data: formdata,
success: function (data) {
alert(data.message);
},
error: function () {
alert("导入失败!");
}
})
17 })

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

C#代码:

 public IActionResult ImportExcel()
2 {
try
{
//先将要导入的文件上传到程序根目录
//获取前端传过来的文件
var files = Request.Form.Files;
var filePath = "";
foreach (var item in files)
{
//获取文件名
filePath = item.FileName;
//指定文件上传路径
filePath = _hostingEnv.WebRootPath + $@"\{filePath}";
//创建文件流
using (FileStream fs = System.IO.File.Create(filePath))
{
//将上载文件的内容复制到目标流
item.CopyTo(fs);
//清除此流的缓冲区并导致将任何缓冲数据写入
fs.Flush();
}
}
//创建文件对象
FileInfo file = new FileInfo(filePath);
if (file != null)
{
//创建ExcelPackage对象
using (ExcelPackage package = new ExcelPackage(file))
{
//访问Excel表中的第一张表
ExcelWorksheet worksheet = package.Workbook.Worksheets[];
//获取表格的行数
int rowCount = worksheet.Dimension.Rows;
//获取表格的列数
int ColCount = worksheet.Dimension.Columns;
var user = new List<UserInfo>();
for (int row = ; row <= rowCount; row++)
{
UserInfo userinfo = new UserInfo();
//指定行列赋值
userinfo.UName = worksheet.Cells[row, ].Value.ToString();
userinfo.UPws = worksheet.Cells[row, ].Value.ToString();
userinfo.UEmail = worksheet.Cells[row, ].Value.ToString();
userinfo.UTel = worksheet.Cells[row, ].Value.ToString();
//将数据保存到实体中
_context.UserInfo.Add(userinfo);
_context.SaveChanges();
}
return Json(new { message = "导入成功!" });
}
}
return null;
}
catch (Exception ex)
{
return Json(new { message = "导入失败!" + ex });
}
59 }

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

End!

ASP.NET Core使用EPPlus导入导出Excel的更多相关文章

  1. asp.net core web的导入导出excel功能

    这里主要记录下asp.net core web页面上进行导入导出excel的操作. 主要是导入,因为现在使用的很多前端框架(例如kendo ui)本身就有导出的功能. 这里使用到EPPlus.Core ...

  2. .NET CORE webapi epplus 导入导出 (实习第一个月的笔记)

    最近有个需求就是网页表格里面的数据导出到excel  于是从各位前辈的博客园搜了搜demo  大部分非为两类 都是用的插件NPOI和Eppluse ,因此在这里就介绍Eppluse 用法,还有就是在博 ...

  3. ASP.Net MVC利用NPOI导入导出Excel

    因近期项目遇到所以记录一下: 首先导出Excel: 首先引用NPOI包 http://pan.baidu.com/s/1i3Fosux (Action一定要用FileResult) /// <s ...

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

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

  5. ASP.NET Core导入导出Excel文件

    ASP.NET Core导入导出Excel文件 希望在ASP.NET Core中导入导出Excel文件,在网上搜了一遍,基本都是使用EPPlus插件,EPPlus挺好用,但商用需要授权,各位码友若有好 ...

  6. ASP.NET Core使用EPPlus操作Excel

    1.前言 本篇文章通过ASP.NET Core的EPPlus包去操作Excel(导入导出),其使用原理与NPOI类似,导出Excel的时候不需要电脑上安装office,非常好用 2.使用 新建一个AS ...

  7. C#中缓存的使用 ajax请求基于restFul的WebApi(post、get、delete、put) 让 .NET 更方便的导入导出 Excel .net core api +swagger(一个简单的入门demo 使用codefirst+mysql) C# 位运算详解 c# 交错数组 c# 数组协变 C# 添加Excel表单控件(Form Controls) C#串口通信程序

    C#中缓存的使用   缓存的概念及优缺点在这里就不多做介绍,主要介绍一下使用的方法. 1.在ASP.NET中页面缓存的使用方法简单,只需要在aspx页的顶部加上一句声明即可:  <%@ Outp ...

  8. .Net core NPOI导入导出Excel

    最近在想.net core NPOI 导入导出Excel,一开始感觉挺简单的,后来真的遇到很多坑.所以还是写一篇博客让其他人少走一些弯路,也方便忘记了再重温一遍.好了,多的不说,直接开始吧. 在.Ne ...

  9. .NET导入导出Excel

    若是开发后台系统,ASP.NET MVC中总是涉及了很多导入导出Excel的问题,有的时候处理起来比较烦 如果能使用以下代码解决,就完美了 public class ReportModel { [Ex ...

随机推荐

  1. seq命令的使用

    标题:seq命令的使用 作用:seq命令用于以指定增量从首数开始打印数字到尾数,即产生从某个数到另外一个数之间的所有整数,并且可以对整数的格式.宽度.分割符号进行控制 语法: [1] seq [选项] ...

  2. LeetCode 110. Balanced Binary Tree平衡二叉树 (C++)

    题目: Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced bin ...

  3. The Preliminary Contest for ICPC Asia Shanghai 2019 C. Triple

    [传送门] FFT第三题! 其实就是要求有多少三元组满足两短边之和大于等于第三边. 考虑容斥,就是枚举最长边,另外两个数组里有多少对边之和比它小,然后就是 $n^3$ 减去这个答案. 当 $n \le ...

  4. C++面向对象程序设计学习笔记(5)

    派生类与继承 概念 继承允许编程者在已有类的基础上创建新的类,可以从一个或者多个已有类中继承函数和数据,并重新定义或者添加新的函数和数据,已有类称为基类或父类,新类称为派生类和子类. 声明 声明一个派 ...

  5. 4.Python项目实战

    这里会每个周更新一个Python的大练习,作为 实战项目... elk

  6. [HDU4867]Xor (线段树分治+类数位dp)

    [HDU4867]Xor (线段树分治+类数位dp) 提供一种\((m+n) log a log m\)带有常数约\(\frac{1}{log n}\)的算法 处理询问,将后来加入的数算进序列中,则每 ...

  7. Visual Studio 调试系列10 附加到正在运行的进程

    系列目录     [已更新最新开发文章,点击查看详细] 可将 Visual Studio 调试器附加到本地或远程计算机上正在运行的进程. 进程运行后,在 Visual Studio 中选择“调试” & ...

  8. Scala函数式编程实现排序算法

    记得<Function Thinking>这本书中提到,现在的编程范式有两类,一类是“命令式编程”,另一类是“函数式编程”,现在我们最常使用的许多语言像c.c++.java都是命令式的,但 ...

  9. JMM与happens-before

    happens-before是JMM最核心的概念,理解happens-before是理解JMM的关键. 一.JMM的设计 首先,让我们先分析一下JMM的设计意图.从JMM的设计者的角度,在设计JMM的 ...

  10. 【操作系统之十五】iptables黑白名单、自定义链、网络防火墙、常用动作

    1.黑白名单当链的默认策略为ACCEPT时,链中的规则对应的动作应该为DROP或者REJECT,表示只有匹配到规则的报文才会被拒绝,没有被规则匹配到的报文都会被默认接受,这就是"黑名单&qu ...