asp.net Mvc 使用NPOI导出Excel文件
1.新建MVC项目,新建控制器、视图

添加控制器:

添加视图(将使用布局页前面的复选框里的勾勾去掉)

2.在Models里新建一个类
public class Shop
{
/// <summary>
/// 编号
/// </summary>
public int Number { get; set; }
/// <summary>
/// 商品名称
/// </summary>
public string ShopName { get; set; }
/// <summary>
/// 商品价格
/// </summary>
public double Price { get; set; }
/// <summary>
/// 商品种类
/// </summary>
public string ShopType { get; set; }
/// <summary>
/// 时间
/// </summary>
public DateTime Date { get; set; }
/// <summary>
/// 添加数据
/// </summary>
/// <returns></returns> public List<Shop> AddShop()
{
var shops = new List<Shop>();
shops.Add(new Shop() { Number = , ShopName = "小熊饼干", Price = 9.9, ShopType = "零食", Date = DateTime.Now });
shops.Add(new Shop() { Number = , ShopName = "旺仔QQ糖", Price = 5.6, ShopType = "零食", Date = DateTime.Now });
shops.Add(new Shop() { Number = , ShopName = "奥利奥饼干", Price = 15.5, ShopType = "零食", Date = DateTime.Now });
return shops;
}
}
3.在控制器里新增一个方法,编写导出的代码
public FileResult ExportData()
{
Shop shop = new Shop();
//获得数据
var Data=shop.AddShop();
//创建一个新的excel文件
HSSFWorkbook book = new HSSFWorkbook();
//创建一个工作区
ISheet sheet = book.CreateSheet("sheet1");
//创建一行 也就是在sheet1这个工作区创建一行 在NPOI中只有先创建才能后使用
IRow row = sheet.CreateRow();
for (int i = ; i < ; i++)
{
//设置单元格的宽度
sheet.SetColumnWidth(i, * );
}
sheet.SetColumnWidth(, * );
sheet.SetColumnWidth(, * );
//定义一个样式,迎来设置样式属性
ICellStyle setborder = book.CreateCellStyle(); //设置单元格上下左右边框线 但是不包括最外面的一层
setborder.BorderLeft = BorderStyle.Thin;
setborder.BorderRight = BorderStyle.Thin;
setborder.BorderBottom = BorderStyle.Thin;
setborder.BorderTop = BorderStyle.Thin; //文字水平和垂直对齐方式
setborder.VerticalAlignment = VerticalAlignment.Center;//垂直居中
setborder.Alignment = HorizontalAlignment.Center;//水平居中
setborder.WrapText = true;//自动换行 //再定义一个样式,用来设置最上面标题行的样式
ICellStyle setborderdeth = book.CreateCellStyle(); //设置单元格上下左右边框线 但是不包括最外面的一层
setborderdeth.BorderLeft = BorderStyle.Thin;
setborderdeth.BorderRight = BorderStyle.Thin;
setborderdeth.BorderBottom = BorderStyle.Thin;
setborderdeth.BorderTop = BorderStyle.Thin; //定义一个字体样式
IFont font = book.CreateFont();
//将字体设为红色
font.Color = IndexedColors.Red.Index;
//font.FontHeightInPoints = 17;
//将定义的font样式给到setborderdeth样式中
setborderdeth.SetFont(font); //文字水平和垂直对齐方式
setborderdeth.VerticalAlignment = VerticalAlignment.Center;//垂直居中
setborderdeth.Alignment = HorizontalAlignment.Center;//水平居中
setborderdeth.WrapText = true; //自动换行 //设置第一行单元格的高度为25
row.HeightInPoints = ;
//设置单元格的值
row.CreateCell().SetCellValue("编号");
//将style属性给到这个单元格
row.GetCell().CellStyle = setborderdeth;
row.CreateCell().SetCellValue("商品名称");
row.GetCell().CellStyle = setborderdeth;
row.CreateCell().SetCellValue("商品价格");
row.GetCell().CellStyle = setborderdeth;
row.CreateCell().SetCellValue("商品种类");
row.GetCell().CellStyle = setborderdeth;
row.CreateCell().SetCellValue("日期");
row.GetCell().CellStyle = setborderdeth;
//循环的导出到excel的每一行
for (int i = ; i < Data.Count; i++)
{
//每循环一次,就新增一行 索引从0开始 所以第一次循环CreateRow(1) 前面已经创建了标题行为0
IRow row1 = sheet.CreateRow(i + );
row1.HeightInPoints = ;
//给新加的这一行创建第一个单元格,并且给这第一个单元格设置值 以此类推...
row1.CreateCell().SetCellValue(Convert.ToString(Data[i].Number));
//先获取这一行的第一个单元格,再给其设置样式属性 以此类推...
row1.GetCell().CellStyle = setborder;
row1.CreateCell().SetCellValue(Data[i].ShopName);
row1.GetCell().CellStyle = setborder;
row1.CreateCell().SetCellValue(Convert.ToString(Data[i].Price));
row1.GetCell().CellStyle = setborder;
row1.CreateCell().SetCellValue(Data[i].ShopType);
row1.GetCell().CellStyle = setborder;
row1.CreateCell().SetCellValue(Convert.ToString(Data[i].Date));
row1.GetCell().CellStyle = setborder;
}
System.IO.MemoryStream ms = new System.IO.MemoryStream();
book.Write(ms);
ms.Seek(, SeekOrigin.Begin);
DateTime dttime = DateTime.Now;
string datetime = dttime.ToString("yyyy-MM-dd");
string filename = "报表导出" + datetime + ".xls";
return File(ms, "application/vns.ms-excel", filename);
}
4.视图页引入脚本文件及编写相应代码
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
<link href="http://localhost:64014/bootstrap/css/bootstrap.min.css" rel="stylesheet" />
<script src="http://localhost:64014/js/jquery-3.4.0.min.js"></script>
<script src="http://localhost:64014/bootstrap/js/bootstrap.min.js"></script>
<style type="text/css">
* {
margin: 0px;
padding: 0px;
}
button {
margin-top: 5px;
margin-left: 5px;
}
</style>
<script type="text/javascript">
function exports() {
//用ajax调用导出方法
$.ajax({
type: 'GET',
url: '/Export/ExportData',
success: function () {
//注:Ajax直接调用后台的下载方法是导出不了文件的,原因是ajax无法接收后台的文件流,所以,需要再次用window.location=url或者window.open(url)下载
window.location = '/Export/ExportData'
}
})
}
</script>
</head>
<body>
<div>
@*按钮用bootstrap渲染一下,会好看一些(*^_^*)*@
<button class="btn btn-info" style="width:90px" onclick="exports()">导出</button>
</div>
</body>
</html>
5.效果:



asp.net Mvc 使用NPOI导出Excel文件的更多相关文章
- ASP.NET MVC 使用NPOI导出Excel 无法访问已关闭的流(转)
第一步重写MemoryStream , 让它不能自动关闭. //新建类 重写Npoi流方法 public class NpoiMemoryStream : MemoryStream { public ...
- 使用NPOI导出Excel文件
使用NPOI导出Excel文件,本实例使用了ASP.NET MVC. 1.使用NPOI导出Excel文件 实例:导出商品列表. 要求:1.通过NPOI导出导出商品列表信息: 2.使用Excel函数计算 ...
- 基于Vue + axios + WebApi + NPOI导出Excel文件
一.前言 项目中前端采用的Element UI 框架, 远程数据请求,使用的是axios,后端接口框架采用的asp.net webapi,数据导出成Excel采用NPOI组件.其业务场景,主要是列表页 ...
- 关于NPOI导出excel文件(xls和xlsx两种格式)提示格式不符的问题
这两天在做导出excel文件的时候遇到这个问题 本来我导出的格式是xlsx格式的,但是下载得到的文件格式变成了xls, 一开始以为是返回的contenttype设置错了 return File(ms, ...
- Asp.Net MVC 使用FileResult导出Excel数据文件
MVC实现Excel导出功能,今天来记录一下. 采取了最简单的方法.(转载) 用的是Html拼接成Table表格的方式,返回 FileResult 输出一个二进制的文件. 第一种:使用FileCo ...
- MVC中用NPOI导出Excel相关问题
情形1:可以直接带参数 前端页面: @.ActionLink("导出Excel", "DownLoadExcel", new { 参数名= '参数值' }, n ...
- C# 未安装Office环境下使用NPOI导出Excel文件
1.NuGet直接安装NPOI程序包: 2. using NPOI.XSSF.UserModel; 3.导出Excel代码: private void TsbExport2ExcelClick(obj ...
- C# DataGridview用NPOI导出Excel文件
导出excel我用的是nuget 的NPOI,直接在项目中添加的,引用到项目中,下面是截图: 下面我把ExcelHelper贴出来 public static class ExcelHelper { ...
- ASP.NET MVC5 使用NPOI导出ExceL 返回浏览器下载
一,什么是NPOI 该项目是位于http://poi.apache.org/的POI Java项目的.NET版本.POI是一个开源项目,可以帮助您读取/写入xls,doc,ppt文件.它有着广泛的应用 ...
随机推荐
- RIDE的Edit界面
有四种类型的Edit界面(注:测试套件主要是存放测试案例,资源文件主要是存放用户关键字) 1.测试套件(file类型)的Edit界面 首先展开Setting: 对右侧红框按钮简单说明: Library ...
- js控制进度条数据
<style><!-- #time{ width:500px; height: 20px; background: red; border-radius: 10px; } --> ...
- BFM模型介绍及可视化实现(C++)
BFM模型介绍及可视化实现(C++) BFM模型基本介绍 Basel Face Model是一个开源的人脸数据库,其基本原理是3DMM,因此其便是在PCA的基础上进行存储的. 目前有两个版本的数据库( ...
- 2018.8.2 python中is和==的区别
一.is 和==的区别 1.is 比较的是左右两边的内存地址, ==比较的是左右两边的值. 2.id() 通过id()可以查看一个变量表示的值得内存中的地址. s = 'alex' s1 = 'ale ...
- Okhttp 请求流程梳理
最近在看 Okhttp 的源码.不得不说源码设计的很巧妙,从中能学到很多.其实网上关于 Okhttp 的文章已经很多了,自己也看了很多.但是俗话说得好,好记性不如烂笔头,当你动手的时候,你会发现你在看 ...
- 【java基础】接口是否能有实现类?
接口是否能有实现方法 我的回答: 当然可以 java8以后就允许接口有实现方法: default修饰的方法 static修饰的方法 /** * 能用lambda的情况,接口里面只有一个未实现的方法 * ...
- 前端技术之:如何运行使用了ES(import)的node程序
方式一: 在package.json文件的scripts域中,配置以下的命令: "start": "cross-env NODE_ENV=dev node -r es ...
- 心脏滴血漏洞复现(CVE-2014-0160)
心脏滴血漏洞简述 2014年4月7日,OpenSSL发布安全公告,在OpenSSL1.0.1版本至OpenSSL1.0.1f Beta1版本中存在漏洞,该漏洞中文名称为心脏滴血,英文名称为HeartB ...
- ASP_MVC项目设计技巧规则
对于上述这种类型的前台页面,属于典型的List型的页面,那么,对于model的设计,要考虑前台人员的负担,尽量简洁: model: Name : 对应产品名称,如FMOS_WPF.FMOS_Tun.. ...
- iSCSI 共享存储
iSCSI(Internet Small Computer System Interface,发音为/ˈаɪskʌzi/),Internet小型计算机系统接口,又称为IP-SAN,是一种基于 ...