开发过程中,经常会遇到导入导出数据的需求,本篇博客介绍在.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. Codeforces Round #604 (Div. 2) D、E、F题解

    Beautiful Sequence Beautiful Mirrors Beautiful Bracket Sequence (easy version) Beautiful Sequence \[ ...

  2. 三层交换机DHCP配置实验(基于Cisco模拟器)

    实验设备: 三层交换机一台,主机若干台,直通线若干 实验目的: 实现客户机从DHCP(动态主机配置协议)服务器上获取动态IP地址. 实验步骤: 1.划分VLAN Switch>enable Sw ...

  3. 【day04】css

    一.CSS2.0[Cascading Style Sheets]层叠样式表  1.什么是CSS:修饰网页元素(标记)外观(比如给文字加颜色,大小,字体)的,W3C规定尽量用CSS样式替代XHTML属性 ...

  4. Linux性能优化实战学习笔记:第五十二讲

    一.上节回顾 上一节,我们一起学习了怎么使用动态追踪来观察应用程序和内核的行为.先简单来回顾一下.所谓动态追踪,就是在系统或者应用程序还在正常运行的时候,通过内核中提供的探针,来动态追踪它们的行为,从 ...

  5. [LeetCode] 891. Sum of Subsequence Widths 子序列宽度之和

    Given an array of integers A, consider all non-empty subsequences of A. For any sequence S, let the  ...

  6. springcloud2.x之management.security.enabled=false报错处理

    1. springcloud1.5.x的消息总线配置是 # RabbitMq的地址.端口,用户名.密码 spring.rabbitmq.host=localhost spring.rabbitmq.p ...

  7. 阿里云等云端服务器VPS改造为ROS-Routeros,最大化利用云端硬盘

    因为ROS官方提供的CHR镜像是用16G版本做出来的,所以我们用dd的方法做出来的ROS,空间都是16G. 如果你的云端是40G空间或者更多呢,也只用了16G空间,是不是很浪费. 我今天看到一篇大神写 ...

  8. zipfile

    zipfile是一个用于处理zip压缩格式的文件的模块, 主要会用到它的ZipFile类 import zipfile zipfile.is_zipfile('myzip.zip')) # 判断一个文 ...

  9. 关于DataTable内部索引已损坏的问题 System.Data.RBTree

    1.错误提示: 最近,Winform程序在极其偶然的情况下会遇到如下错误提示 Framework 版本: v4.0.30319 说明: 由于未经处理的异常,进程终止. 异常信息: System.Inv ...

  10. Java连载9-数据类型&字符编码

    一.数据类型注意:(1)计算机最初只支持英文,最先出现的字符编码是:ASII码例如:‘a'对应97,对应01100001(2)编码和解码的时候采用同一套字典/对照表,不会出现乱码.否则会出现乱码.二. ...