Asp .Net Core Excel导入和导出
ASP .Net Core使用EPPlus实现Api导入导出,这里使用是EPPlus 4.5.2.1版本,.Net Core 2.2。在linux上运行的时候需要安装libgdiplus 。
下面我们看下如何实现导出导入的功能。
新建项目ASP.NET Core Web Api 、添加Test类
public class Test
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
导出Excel文件
新建控制器ExecelController
using System; using System.Collections.Generic; using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using OfficeOpenXml; namespace WebApplication5.Controllers
{
[ApiController]
public class ExecelController : ControllerBase
{ [Route("api/Execel/TOExecel")]
public IActionResult TOExecel()
{
var list = new List<Test>(); list.Add(new Test()
{
Id = ,
Name = "Test",
Age = , }); byte[] fileContents;
using (ExcelPackage package = new ExcelPackage())
{ ExcelWorksheet worksheet = package.Workbook.Worksheets.Add(".Net Core 导出"); worksheet.Cells[, ].Value = "序号";
worksheet.Cells[, ].Value = "Id";
worksheet.Cells[, ].Value = "名称";
worksheet.Cells[, ].Value = "年龄"; int i = ; foreach (var item in list)
{
worksheet.Cells["A" + i].Value = i - ;
worksheet.Cells["B" + i].Value = item.Id;
worksheet.Cells["C" + i].Value = item.Name;
worksheet.Cells["D" + i].Value = item.Age;
i = i + ;
} fileContents = package.GetAsByteArray();
if (fileContents == null || fileContents.Length == )
{
return NotFound();
}
}
return File(fileContents, "application/ms-excel", $"{Guid.NewGuid().ToString()}.xlsx");
}
}
}
导入Excel文件
[Route("api/Execel/Import")]
public async Task<IActionResult> Import(IFormFile excelFile)
{
var msg = "";
if (excelFile == null || excelFile.Length <= )
{
msg = "请选择导入文件!";
return Ok(msg);
}
if (!Path.GetExtension(excelFile.FileName).Equals(".xlsx", StringComparison.OrdinalIgnoreCase))
{
msg = "请选择导入文件为.xlsx的后缀名!";
return Ok(msg);
}
try
{
using (var stream = new MemoryStream())
{
await excelFile.CopyToAsync(stream);
using (var package = new ExcelPackage(stream))
{
StringBuilder sb = new StringBuilder();
ExcelWorksheet worksheet = package.Workbook.Worksheets[];
int rowCount = worksheet.Dimension.Rows;
int ColCount = worksheet.Dimension.Columns;
bool bHeaderRow = true;
for (int row = ; row <= rowCount; row++)
{
Test model = new Test();
for (int col = ; col <= ColCount; col++)
{
if (bHeaderRow)
{
switch (col)
{
case :
model.Id = int.Parse(worksheet.Cells[row, col].Value.ToString());
break;
case :
model.Name = worksheet.Cells[row, col].Value.ToString();
break;
case :
model.Age = int.Parse(worksheet.Cells[row, col].Value.ToString());
break;
}
}
else
{
switch (col)
{
case :
model.Id = int.Parse(worksheet.Cells[row, col].Value.ToString());
break;
case :
model.Name = worksheet.Cells[row, col].Value.ToString();
break;
case :
model.Age = int.Parse(worksheet.Cells[row, col].Value.ToString());
break;
}
}
}
//插入model即可
}
}
}
msg = "导入成功!";
return Ok(msg);
}
catch (Exception ex)
{
msg = ex.Message;
return Ok(msg);
}
}
按照格式导入即可完成导入功能。
这里导出是通过流的方式进行导出的,一般来说也可以先把Excel保存到服务器,然后直接通过Url访问服务器的文件的地址就可以实现在线下载。通过流导出的话就不需要去访问服务器文件了,访问接口查询数据就直接导出了。
在导入的时候目前测试仅仅支持.xlsx格式的,.xls格式的Excel在基于流创建ExcelPackage类的新实例的时候会报为空的错误。var package = new ExcelPackage(stream)还有待修改。
欢迎大家扫描下方二维码,和我一起学习更多的知识
系列目录 前言 上一节使用了LinqToExcel和CloseXML对Excel表进行导入和导出的简单操作,大家可以跳转到上一节查看: ASP.NET MVC5+EF6+EasyUI 后台管理系统(6 ... 本篇主要介绍C#的Excel导入.导出. 目录 1. 介绍:描述第三方类库NPOI以及Excel结构 2. Excel导入:介绍C#如何调用NPOI进行Excel导入,包含:流程图.NOPI以及C#代 ... 本篇主要介绍C#的Excel导入.导出. 目录 1. 介绍:描述第三方类库NPOI以及Excel结构 2. Excel导入:介绍C#如何调用NPOI进行Excel导入,包含:流程图.NOPI以及C#代 ... JXLS (Excel导入.导出工具使用) 1:简介: jxls是一个简单的.轻量级的excel导出库,使用特定的标记在excel模板文件中来定义输出格式和布局.java中成熟的excel导出工具有p ... 系列目录 昨天文章太过仓促没有补充导出的示例源码,在者当时弄到到很晚没时间做出导出功能,对阅读理解造成影响,现补充一份示例源码,顺便补充导出的功能说明,望理解 示例代码下载 https://yun ... 本文示例代码下载: 链接:http://pan.baidu.com/s/1jHBdgCA 密码:hzh7 ps:Vs数据库脚本在解压目录下,修改web.config数据库链接,示例代码包含:导入,导出 ... 前言 我们在日常开发中对Excel的操作可能会比较频繁,好多功能都会涉及到Excel的操作.在.Net Core中大家可能使用Npoi比较多,这款软件功能也十分强大,而且接近原始编程.但是直接使用Np ... 前言 之前说了导入和导出,也提供了自定义的表模的导入,可见LinqToExcel可以做的事情不仅仅如此 这次我们来演示比较复杂的导出Excel,导出复杂的Excel与导入复杂的Excel原理基本是一样 ... 1.Excel数据导入到数据库中: //该方法实现从Excel中导出数据到DataSet中,其中filepath为Excel文件的绝对路径,sheetname为表示那个Excel表: p ... 操作符重载 自定义类型需要操作符重载 运算符重载入门技术推演 友元函数和成员函数实现2元运算符重载 友元函数和成员函数实现1元运算符重载(前置++,前置--,后置++,后置--) 友元函数实现运算符重 ... 大神建议: https://blog.knownsec.com/Knownsec_RD_Checklist/v3.0.html#FMID_1218170279FM https://websec.rea ... 简介: MVPs与阿里云一起探索前路,用技术改变世界! 在云的世界中,从来没有“简单”二字,想成为一个优秀的开发者,也没有“简单”二字,而阿里云MVP就一直是云计算中最为顶尖的专家.现在,阿里云MVP ... 导航:VS2019开发Django系列 下班回到家,洗漱完毕,夜已深.关于Django这个系列的博文,我心中的想法就是承接之前的微信小程序的内容,做一个服务端的管理中心,上新菜单,调整价格啊!之类的, ... 前言: MySQL读写分离是指让master处理写操作,让slave处理读操作,非常适用于读操作量比较大的场景,可减轻master的压力.使用mysql-proxy实现mysql的读写分离,mysq ... CSS3属性中有关于制作动画的三个属性:Transform,Transition,Animation.前面已经介绍过Transform和Transition了,这里我们来学习Animation动画.通 ... ConcurrentHashMap源码分析 其实ConcurrentHashMap我自己已经看过很多遍了,但是今天在面试阿里的时候自己在描述ConcurrentHashMap发现自己根本讲不清楚什么是 ... 本笔记摘抄自:https://www.cnblogs.com/zhili/archive/2012/07/18/ThreadPool.html,记录一下学习过程以备后续查用. 一.线程池基础 首先,创 ... 前记:最近真的挺忙的,一件事接着一件,都忘了我的React项目,尽管这是一个没写概率没写离散的夜晚,我决定还是先做做我的React 好了,进入正题 项目需求,需要导入和导出表单,发现前端已经强大到无所 ... 上一节我们在 host1 中运行了容器 bbox1,今天将详细讨论 overlay 网络跨主机通信的原理. 在 host2 中运行容器 bbox2: bbox2 IP 为 10.0.0.3,可以直接 ...Asp .Net Core Excel导入和导出的更多相关文章
随机推荐