首先在View视图中有一表单form,导出按钮<input class="btn export" type="button" value="导出" />,在js写入点击导出按钮的代码,如下:

$(".export").click(function () {
window.location.href = "/Statis/ExportExecel?data=" + $("form").serialize();
}

控制器下导出功能代码:

 public FileResult ExportExecel(SearchInfo info)
{ //获取list数据
var data = GetSearchList(info).ToList(); //创建Excel文件的对象
NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();
//添加一个sheet
NPOI.SS.UserModel.ISheet sheet1 = book.CreateSheet("Sheet1"); //貌似这里可以设置各种样式字体颜色背景等,但是不是很方便,这里就不设置了 //给sheet1添加第一行的头部标题
NPOI.SS.UserModel.IRow row1 = sheet1.CreateRow();
row1.CreateCell().SetCellValue("文印名称");
row1.CreateCell().SetCellValue("份数");
row1.CreateCell().SetCellValue("页数");
row1.CreateCell().SetCellValue("单双面");
row1.CreateCell().SetCellValue("打印色彩");
row1.CreateCell().SetCellValue("纸张大小");
row1.CreateCell().SetCellValue("印刷类型");
row1.CreateCell().SetCellValue("申请时间");
row1.CreateCell().SetCellValue("申请人"); //....N行 //将数据逐步写入sheet1各个行
for (int i = ; i < data.Count; i++)
{
NPOI.SS.UserModel.IRow rowtemp = sheet1.CreateRow(i + );
rowtemp.CreateCell().SetCellValue(data[i].printname.ToString());
rowtemp.CreateCell().SetCellValue(data[i].copynumber.ToString());
rowtemp.CreateCell().SetCellValue(data[i].pagernumber.ToString());
rowtemp.CreateCell().SetCellValue(data[i].printmode.ToString());
rowtemp.CreateCell().SetCellValue(data[i].printcolor.ToString());
rowtemp.CreateCell().SetCellValue(data[i].printpagersize.ToString());
rowtemp.CreateCell().SetCellValue(data[i].printingtype.ToString());
rowtemp.CreateCell().SetCellValue(data[i].addtime.ToString());
rowtemp.CreateCell().SetCellValue(data[i].User.realname.ToString()); //....N行
}
// 写入到客户端
System.IO.MemoryStream ms = new System.IO.MemoryStream();
book.Write(ms);
ms.Seek(, SeekOrigin.Begin);
DateTime dt = DateTime.Now;
string dateTime = dt.ToString("yyyyMMddHHmmssfff");
string fileName = "查询结果" + dateTime + ".xls";
return File(ms, "application/vnd.ms-excel", fileName);
}
public IQueryable<userprint> GetSearchList(SearchInfo info)
{
var stat = from p in db.userprints
select p;
if (info.parentdepname != null)
{
stat = stat.Where(s => s.User.parentdepname ==info.parentdepname);
}
if (info.depname != null)
{
stat = stat.Where(s => s.User.depname == info.depname);
}
if (!string.IsNullOrEmpty(info.printname))
{
stat = stat.Where(s => s.printname.Contains(info.printname));
}
if (info.printcolor != null)
{
stat = stat.Where(s => s.printcolor == info.printcolor);
}
if (info.printingtype != null)
{
stat = stat.Where(s => s.printingtype == info.printingtype);
}
if (info.checkupstate != null)
{
stat = stat.Where(s => s.checkupstate == (info.checkupstate == ) ? true : false);
}
if (info.printstate != null)
{
stat = stat.Where(s => s.printstate == (info.printstate == ) ? true : false);
}
if (!string.IsNullOrEmpty(info.userrealname))
{
stat = stat.Where(p => p.User.realname == info.userrealname);
}
if (info.begintime != null)
{
var start = info.begintime;
var end = info.endtime == null ? DateTime.Now : info.endtime;
stat = stat.Where(p => p.addtime > start && p.addtime < end);
}
//if (Request.IsAjaxRequest())
//{
//}
return stat;
}

这样就完成了从数据库中查询数据,然后导出到excel

asp.net MVC 导出查询结果到Excel的更多相关文章

  1. ASP.NET MVC导出excel

    ASP.NET MVC导出excel 要在ASP.NET MVC站点上做excel导出功能,但是要导出的excel文件比较大,有几十M,所以导出比较费时,为了不影响对界面的其它操作,我就采用异步的方式 ...

  2. ASP.NET MVC 5 - 查询Details和Delete方法

    在这部分教程中,接下来我们将讨论自动生成的Details和Delete方法. 查询Details和Delete方法 打开Movie控制器并查看Details方法. public ActionResul ...

  3. asp.net mvc异步查询

    对于asp.net mvc异步查询 如何做MVC异步查询,做列表页面. 查询是项目中必不可少的工作,而且不同的项目不同的团队,都有自己的简单方法.Asp.net mvc 有自己独特的优势,下面是结合m ...

  4. [转]ASP.NET MVC 5 - 查询Details和Delete方法

    在这部分教程中,接下来我们将讨论自动生成的Details和Delete方法. 查询Details和Delete方法 打开Movie控制器并查看Details方法. public ActionResul ...

  5. ASP.NET MVC 导出CSV文件

    ASP.NET MVC   导出CSV文件.直接贴代码 /// <summary> /// ASP.NET MVC导出CSV文件Demo1 /// </summary> /// ...

  6. ASP.NET MVC导出excel(数据量大,非常耗时的,异步导出)

    要在ASP.NET MVC站点上做excel导出功能,但是要导出的excel文件比较大,有几十M,所以导出比较费时,为了不影响对界面的其它操作,我就采用异步的方式,后台开辟一个线程将excel导出到指 ...

  7. 对于asp.net mvc异步查询

    如何做MVC异步查询,做列表页面. 查询是项目中必不可少的工作,而且不同的项目不同的团队,都有自己的简单方法.Asp.net mvc 有自己独特的优势,下面是结合mvc实现一个产品列表的Demo. 问 ...

  8. ASP.NET MVC 导出Word报表

    最近要做MVC导出Word报表功能.查了查资料发现一个好用的插件就是Aspose.Word.这个插件也很有名气,也很好用. 1.首先就是引用该插件 2.填充Word模版 3.后台操作 private ...

  9. ASP.NET MVC导出excel npoi

    使用npoi组件 前端代码: @Html.ActionLink("导出Excel", "ExportWarehouseInOutDetailTable", ne ...

随机推荐

  1. 链表--数据结构与算法JavaScript描述(6)

    链表 概念 链表是由一组节点组成的集合. 每个节点都使用一个对象的引用指向它的后继. 指向另一个节点的引用叫做 链. 许多链表的实现都在链表最前面有一个特殊节点,叫做头节点. 链表的尾元素指向一个nu ...

  2. GDAL库简介以及在Windows下编译过程

    GDAL(Geospatial Data Abstraction Library,地理空间数据抽象库)是一个在X/MIT许可协议下的开源栅格空间数据转换库.官网http://www.gdal.org/ ...

  3. spring源码-BeanPostProcessor-3.3

    一.BeanPostProcessor这个是spring容器的拓展之一,是用于获取bean的时候处理对应的对象: 二.常用场景,在获取bean的时候,重新初始化bean的属性等. 三.实现方式(加入容 ...

  4. long 与int 比较问题

    long 与int 比较,在32位机器,sizeof都是 占用4个字节: 在window 64位也是占用4个字节 但是在Linux 64位,long占用 8个字节, int占用4个字节,这样比较就会有 ...

  5. MySQL不能连接本地数据库10061

    可能的原因是本地服务器没有启动,在安装配置MySQL时,我去掉了开机自动开启,所以开机之后出现了错误10061 解决办法: 一.计算机右击选择管理 二.选择服务,找到MySQL,右击手动,选择启动服务

  6. c的多态

    使用函数数组,实现多态 参考my_strtoll10

  7. 92套AE抖音快闪模板(精品)

    包含很多场景和类型,直接用即可,下载地址:百度网盘,https://pan.baidu.com/s/1bRFql1zFWyfpTAwa6MhuPA 内容截图:    

  8. mysql中的select语句where条件group by ,having , order by,limit的顺序及用法

    -- 语法: SELECT select_list FROM table_name [ WHERE search_condition ] [ GROUP BY group_by_expression ...

  9. 腾讯地图和百度地图的PHP相互转换

    /** * 百度地图---->腾讯地图 * @param double $lat 纬度 * @param double $lng 经度 * @return array(); */ functio ...

  10. 【MFC】VS2017新建完MFC后,没有界面,只有代码

    问题描述:双击.rc文件后提示在另一个编辑器中打开 解决方法整合: 1----- 打开工程之前先把.rc文件改个名称,然后打开工程双击解决方案管理器的.rc文件, 会显示"载入失败" ...