转:ASP.NET MVC 将IList<T>导出Excel文档的泛型类
/// <summary>
/// 提供将泛型集合数据导出Excel文档。
/// </summary>
/// <typeparam name="T"></typeparam>
public class ExcelResult<T> : ActionResult where T : new()
{
public ExcelResult(IList<T> entity, string fileName, bool showDisplayName = true)
{
this.Entity = entity;
this.FileName = fileName;
this.ShowDisplayName = showDisplayName;
} public ExcelResult(IList<T> entity, bool showDisplayName = true)
{
this.Entity = entity; DateTime time = DateTime.Now;
this.FileName = string.Format("{0}_{1}_{2}_{3}",
time.Month, time.Day, time.Hour, time.Minute);
this.ShowDisplayName = showDisplayName;
} public IList<T> Entity
{
get;
set;
} public string FileName
{
get;
set;
} public bool ShowDisplayName
{
get;
set;
} public override void ExecuteResult(ControllerContext context)
{
if (Entity == null)
{
new EmptyResult().ExecuteResult(context);
return;
} SetResponse(context);
} /// <summary>
/// 设置并向客户端发送请求响应。
/// </summary>
/// <param name="context"></param>
private void SetResponse(ControllerContext context)
{
StringBuilder sBuilder = ConvertEntity();
byte[] bytestr = Encoding.Unicode.GetBytes(sBuilder.ToString());
context.HttpContext.Response.Clear();
context.HttpContext.Response.ClearContent();
context.HttpContext.Response.Buffer = true;
context.HttpContext.Response.Charset = "GB2312";
//添加中文GB2312格式
context.HttpContext.Response.ContentEncoding = Encoding.GetEncoding("GB2312");
context.HttpContext.Response.ContentType = "application/ms-excel";
context.HttpContext.Response.AddHeader("Content-Disposition", "attachment; filename=" + FileName + ".xls");
context.HttpContext.Response.AddHeader("Content-Length", bytestr.Length.ToString());
context.HttpContext.Response.Write(sBuilder);
//添加Flush方法
context.HttpContext.Response.Flush();
//添加Close方法
context.HttpContext.Response.Close();
context.HttpContext.Response.End();
} /// <summary>
/// 把泛型集合转换成组合Excel表格的字符串。
/// </summary>
/// <returns></returns>
private StringBuilder ConvertEntity()
{
StringBuilder sb = new StringBuilder();
AddTableHead(sb);
AddTableBody(sb);
return sb;
} /// <summary>
/// 根据IList泛型集合中的每项的属性值来组合Excel表格。
/// </summary>
/// <param name="sb"></param>
private void AddTableBody(StringBuilder sb)
{
if (Entity == null || Entity.Count <= )
{
return;
} PropertyInfo[] properties = typeof(T).GetProperties(); if (properties.Length <= )
{
return;
} for (int i = ; i < Entity.Count; i++)
{
for (int j = ; j < properties.Length; j++)
{
string sign = j == properties.Length - ? "\n" : "\t";
object obj = properties[j].GetValue(Entity[i], null);
sb.Append(obj ?? string.Empty).Append(sign);
}
}
} /// <summary>
/// 根据指定类型T的所有属性名称来组合Excel表头。
/// </summary>
/// <param name="sb"></param>
private void AddTableHead(StringBuilder sb)
{
PropertyInfo[] properties = typeof(T).GetProperties(); if (properties.Length <= )
{
return;
} for (int i = ; i < properties.Length; i++)
{
string headName = properties[i].Name;
string sign = i == properties.Length - ? "\n" : "\t";
if (!ShowDisplayName)
{
sb.Append(headName).Append(sign);
continue;
} Attribute attribute = Attribute.GetCustomAttribute(properties[i], typeof(DisplayNameAttribute));
if (attribute != null)
{
DisplayNameAttribute displayNameAttribute = attribute as DisplayNameAttribute;
if (displayNameAttribute != null && !string.IsNullOrWhiteSpace(displayNameAttribute.DisplayName))
{
headName = displayNameAttribute.DisplayName;
}
} sb.Append(headName).Append(sign);
}
}
}
调用:
public ActionResult Index()
{
List<Student> students = new List<Student>();
for (int i = ; i <= ; i++)
{
students.Add(new Student
{
Name = "Name " + i.ToString(),
Age = i,
Address = "Address " + i.ToString()
});
} return new ExcelResult<Student>(students);
}
定义:
public class Student
{
[DisplayName("姓名")]
public string Name { get; set; }
[DisplayName("年龄")]
public int Age { get; set; }
[DisplayName("家庭住址")]
public string Address { get; set; }
}
http://www.cnblogs.com/itbar/archive/2011/10/16/mvc_export_excel.html ASP.NET MVC 将IList<T>导出Excel文档的泛型类(继承自ActionResult)
转:ASP.NET MVC 将IList<T>导出Excel文档的泛型类的更多相关文章
- ASP.Net MVC中数据库数据导出Excel,供HTTP下载(转)
转自http://www.cnblogs.com/hipo/archive/2012/03/13/2394019.html 一.关于下载 一般对下载权限有没有限制,或安全性要求不高的情况下,基于web ...
- ASP.Net MVC中数据库数据导出Excel,供HTTP下载
本文来自:http://www.cnblogs.com/hipo/archive/2012/03/13/2394019.html 一.关于下载 一般对下载权限有没有限制,或安全性要求不高的情况下,基于 ...
- struts2中利用POI导出Excel文档并下载
1.项目组负责人让我实现这个接口,因为以前做过类似的,中间并没有遇到什么太困难的事情.其他不说,先上代码: package com.tydic.eshop.action.feedback; impor ...
- Asp.net中导出Excel文档(Gridview)
主要思路,通过GridView来导出文档. 新建一个Aspx页面,页面创建GridView控件,后台绑定好数据源.然后load中直接打印即可导出 前台的GridView <asp:GridVie ...
- Java之Poi导出Excel文档
一.Poi简介 在后台管理系统中,我们经常要做的导出操作,通常导出为Excel文档的形式,而Poi则提供了这种需要的支持. 二.Workbook/HSSFWorkbook/XSSFWorkbook 1 ...
- ASP.Net MVC利用NPOI导入导出Excel
因近期项目遇到所以记录一下: 首先导出Excel: 首先引用NPOI包 http://pan.baidu.com/s/1i3Fosux (Action一定要用FileResult) /// <s ...
- asp.net mvc 中使用NPOI导出excel
版本信息:NPOI1.2.5(2.0以上的版本很多方法不清楚) 明确三点: path: mvc 部署网站的时候,我们肯定要拷贝的一个文件夹就mvc的UI层,有点可以肯定的是,你部署网站的路径不一定都是 ...
- asp.net mvc4使用NPOI 数据处理之快速导出Excel文档
一.背景 在之前做的小项目里有一需求是:要求将一活动录入的数据进行统计,并以excel表格形式导出来,并且对表格格式要求并不高. 二.问题分析 鉴于用户只要求最终将数据库中的数据导出excel,对于格 ...
- ASP.NET MVC 5使用Swagger生成API文档
一.安装 新建一个没有身份验证的mvc项目 - SwaggerMvc5Demo,然后添加一个名为Remote(自定义)且包含基础读写(不想手写)的ApiController 开源地址:https: ...
随机推荐
- (转)NGUI研究院之三种方式监听NGUI的事件方法
NGUI事件的种类很多,比如点击.双击.拖动.滑动等等,他们处理事件的原理几乎万全一样,本文只用按钮来举例. 1.直接监听事件 把下面脚本直接绑定在按钮上,当按钮点击时就可以监听到,这种方法不太好很不 ...
- (https专业版)2018年1月5日高仿互站仿友价T5虚拟交易+实物交易商城-站长交易源码送手机版程序10套模版+首页微信登陆+头部下拉导航
(https专业版)2018年1月5日高仿互站仿友价T5虚拟交易+实物交易商城-站长交易源码送手机版程序10套模版+首页微信登陆+头部下拉导航 首页支持微信登陆,只有第8套模板支持(endv模板),后 ...
- textarea光标移到末尾兼容ie,ffchrome
function moveEnd(obj){ obj.focus(); var len = obj.value.length; if (document ...
- VMware vSphere学习之手动克隆虚拟机
VMware ESxi5.0中,在没有安装VMware vCenter server虚拟机管理器的情况下,vSphere Client是没有提供克隆选项的. 但是还是有以下方法可以通过vSphere ...
- whereis 命令(转)
原文:http://www.cnblogs.com/peida/archive/2012/11/09/2761928.html whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b) ...
- HDU1212 Big Number 【同余定理】
Big Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...
- 如何理解VB窗体中的scale类属性及width height属性之间的关系
如何理解VB窗体中的scale类属性及width height属性之间的关系 VB中的SCALEHIEGT,SCALEWIDTH,与窗体中的WIDTH,HEIGHT的区别及关系是许多VB初学者难以理解 ...
- 解决-bash: fork: retry: Resource temporarily unavailable (修改最大线程数)
错误提示的本质是Linux操作系统无法创建更多进程,导致出错.因此要解决这个问题需要修改Linux允许创建更多的进程. 方案一: cat /etc/security/limits.conf echo ...
- jstl foreach 取index
<c:forEach var="myAccountInfo" items="${myAccountInfos}" varStatus="inde ...
- JAVA Drp项目实战—— Unable to compile class for JSP 一波三折
交代下背景.电脑系统是64位的,用的是64位的Tomcat.安装是32位的Myeclipse10,java环境也是32位的.Tomcat在開始启动时会报这样一个错误,"Can't load ...