开发过程中,经常会遇到导入导出数据的需求,本篇博客介绍在.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. python处理JSON 序列化与反序列化

    #序列化 >>> import json>>> d={"key":"value"}>>> d{'key': ...

  2. JDOJ3008 圆盘染色

    JDOJ3008 圆盘染色 https://neooj.com/oldoj/problem.php?id=3008 题目描述 将一个圆盘分为N (1 <= N <= 105)个扇形,每个扇 ...

  3. 继上篇博客对安卓爬虫以及TextView更新的问题解释

    只能在主线程更新ui,或者用handler传输.爬虫是在另一个异步线程进行,所以爬出来的数据对控件赋值就比较麻烦.这次使用了线程数据传到runnable将数据传到handler进行赋值. 结果图: 源 ...

  4. UrlRouting原理笔记

    UrlRouting路由流程: 添加路由:可以通过调用MapRoute().MapPageRoute(),它们内部都是创建Route对象,最终添加到RouteCollection中. 还可以使用[Ro ...

  5. JAVA基础概念(二)

    一.java修饰符和使用场景 修饰符是用来定义类.方法或者变量的访问权限,分为两大类: 访问修饰符: 限定类.属性.方法是否可以被程序里其他部分访问和调用. private<default< ...

  6. Idea中自动生成get,set,toString等方法

    https://blog.csdn.net/sinat_41226396/article/details/80770520 自动生成main函数: https://blog.csdn.net/fanr ...

  7. tecplot无法处理高版本fluent导出的Ensight格式

    高版本的Fluent完成计算,将计算结果导出为Ensight格式,然后再导入tecplot当中进行后处理的时候会遇见如下的错误: 但是将低版本的Fluent计算结果导出为Ensight格式,却可以顺利 ...

  8. 应用层协议:HTTP

    1. HTTP定义 HyperText Transfer Protocol,超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络 ...

  9. java包学习之IO

    第一 java IO的专题 第二 编码 1.从桌面创建内容为“联”的txt,打开为乱码开始讲起,原因是我们的电脑默认是创建ansi编码的,但是“联”字比较特别,编码会被认为是utf-8的,所以会出现乱 ...

  10. long 在不同操作系统下所占用的字节数

    不同平台下C\C++数值数据类型长度如下: 类型 win32 win64 linux32 linux64 其中long类型和指针类型需要特别注意,编写跨平台的软件时尽量不要使用long类型,或者需要对 ...