只是觉得这样很方便 记录一下

公司有封装的方法,不过是查出的Table类型,每次用的时候很都很烦,处理数据也不方便,最主要的是我也没耐心去看,反正在我看来很麻烦,用的时候很头疼。还是习惯通过Model List来处理数据,可以利用Model Class属性来处理数据格式等等


            var orders=GetOrders();//获取订单列表
            //Excel表头            
string[] headerTemp = { "订单号", "下单时间", "订单状态", "店铺名称", "商品名称"};
//对应的Model Class属性
string[] propertyNameTemp = { "OrderId", "OrderDate", "OrderStatusString", "StoreName", "ProductName"};
#region excel简单样式设置
HSSFWorkbook hssfworkbook = new HSSFWorkbook();
ISheet sheet1 = hssfworkbook.CreateSheet("Sheet1");
ICellStyle othercolstyle = hssfworkbook.CreateCellStyle();
IFont othercolfont = hssfworkbook.CreateFont();
othercolfont.FontName = "微软雅黑";
othercolfont.FontHeightInPoints = ;
othercolstyle.SetFont(othercolfont);
othercolstyle.VerticalAlignment = VerticalAlignment.Center;
othercolstyle.Alignment = HorizontalAlignment.Center;
#endregion for (int i = ; i <= orders.Count; i++)
{
IRow row = sheet1.CreateRow(i);
row.Height = * ;
for (int j = ; j < headerTemp.Length; j++)
{
ICell cell = row.CreateCell(j);
cell.CellStyle = othercolstyle;
sheet1.SetColumnWidth(j, * );
if (i == )
{
              //第一行设置表头
cell.SetCellValue(headerTemp[j]);
}
else
{
Type temp = orders[i - ].GetType();
PropertyInfo propertyInfo = temp.GetProperty(propertyNameTemp[j]);
object pvalue = propertyInfo.GetValue(orders[i - ], null);
cell.SetCellValue(pvalue == null ? "" : pvalue.ToString());
}
}
}
// 写入到客户端
System.IO.MemoryStream ms = new System.IO.MemoryStream();
hssfworkbook.Write(ms);
ms.Seek(, SeekOrigin.Begin);
return File(ms, "application/vnd.ms-excel", string.Format("{0}.xls", DateTime.Now)); //上面代码 return File为.net mvc中返回方式
//ashx或aspx页面最后返回方式

//写入流
MemoryStream file = new MemoryStream();
hssfworkbook.Write(file);


if (file != null)
{
// 写入到客户端
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", HttpContext.Current.Server.UrlEncode("竞猜用户.xlsx")));
Response.BinaryWrite(file.ToArray());
}

 

每次只需要设置excel表头和对应的Model属性就可以,反射那部分不用动。

一般像订单状态查出来是int类型的枚举值,可以在Model里扩展枚举属性OrderStatusString

public string OrderStatusString
{
get{return 对应的订单状态枚举;}
}

NPOI+反射 实现快速导出的更多相关文章

  1. asp.net mvc4使用NPOI 数据处理之快速导出Excel文档

    一.背景 在之前做的小项目里有一需求是:要求将一活动录入的数据进行统计,并以excel表格形式导出来,并且对表格格式要求并不高. 二.问题分析 鉴于用户只要求最终将数据库中的数据导出excel,对于格 ...

  2. c#使用NPOI快速导出到Excel

    接上篇博文<C#快速导出到excel>:由于此种方法不能导出成.xlsx格式,为解决此问题,本次分享使用NPOI. 参考:https://www.cnblogs.com/lazyneal/ ...

  3. 使用NPOI快速导出导入Excel

    这两天做项目需要导入导出EXCEL,是基于NPOI的封装,设计思路是使用DataTable,然后导出一个和DataTable一模一样的Excel表出来 github地址:https://github. ...

  4. mysql快速导出数据库ER图和数据字典(附navicat11安装教程及资源)

    ♣ mysql使用navicat11快速导出数据库ER图 ♣ mysql使用navicat11快速导出数据库数据字典 ♣ navicat11 for mysql (这里是mysql5.7.12)专业版 ...

  5. mysql远程快速导出csv格式数据工具

    如需转载,请经本人同意. 之前本人曾经写过一个使用 select ....into outfile原理导出数据的脚本,但该脚本值适用于本地快速导出,并不支持远程服务,故又编写了下面这个支持远程导出的脚 ...

  6. ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案 try.dot.net 的正确使用姿势 .Net NPOI 根据excel模板导出excel、直接生成excel .Net NPOI 上传excel文件、提交后台获取excel里的数据

    ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案   ASP.NET Core 从2.2版本开始,采用了一个新的名为Endpoint的路由方案,与原来的方案在使用上差别不 ...

  7. Navicat Premium快速导出数据库ER图和数据字典

    2.快速导出数据库数据字典: SQL Server 数据库,生成数据字典 use YourDatabase --指定要生成数据字典的数据库 go SELECT 表名= then d.name else ...

  8. 使用HTML,CSS快速导出数据到Excel

    在应用中经常会遇到要从系统或数据库中导出数据平面文件,一般是导出到txt,csv或excel.txt和csv一般用在系统间的数据交换, 而excel一般有较好的显示效果,可以按照一定的模板导出,导出就 ...

  9. 使用NPOI或EPPlus来导出Excel文件实例,可在Excel文件加密

    使用NPOI.dll组件来导出Excel文件,并设置样式,Nuget引用即可. packages\NPOI.2.1.3.1\lib\net20\NPOI.dll #region Excel prote ...

随机推荐

  1. 判断网站URL是否正常访问脚本

    #!/bin/bash [ -f /etc/init.d/functions ] && . /etc/init.d/functions function usage(){ echo & ...

  2. VR全景智慧城市:开启VR全景逛街新时代~

    VR全景,又被称为3D实景,是一种新兴的富媒体技术,其与视频,声音,图片等传统的流媒体大的区别是"可操作,可交互". 对于顾客体验来说,VR确实是对于实体店是一种颠覆性的创新,它既 ...

  3. mybatis批量增、删、改(更新)操作oracle和mysql批量写法小记

    前言:用mybatis也好几年了,mybatis在批量的增删操作也写起来也是比较简单的,只有批量更新这一块是特别坑,特此记录. 注:本文主要用来记录oracle和mysql数据库在使用mybatis的 ...

  4. (转)导出EXCEL时科学计数法问题

    //1)  文本:vnd.ms-excel.numberformat:@ //2)  日期:vnd.ms-excel.numberformat:yyyy/mm/dd //3)  数字:vnd.ms-e ...

  5. [BZOJ1415]聪聪和可可

    Input 数据的第1行为两个整数N和E,以空格分隔,分别表示森林中的景点数和连接相邻景点的路的条数. 第2行包含两个整数C和M,以空格分隔,分别表示初始时聪聪和可可所在的景点的编号. 接下来E行,每 ...

  6. angular2/angular4 如何通过$http的post方法请求下载二进制的Excel文件

    时间有限,废话就不多说了,直接上干货! 下面给大家介绍一下我遇到的一个坑,如果你也遇到了,那恭喜你,你一定能找到答案:angular2/angular4 如何通过$http的post方法请求下载二进制 ...

  7. JS语句

    JS语句包括: 1.顺序语句 2.分支语句:  if...else                   switch...case 3.循环语句 一.先看顺序语句: </body> < ...

  8. react 基础

    一.组件 函数式定义的无状态组件 es5原生方式React.createClass定义的组件 es6形式的extends React.Component定义的组件 React.Component是以E ...

  9. Ruby中文乱码问题

    中文乱码问题 解决方法为只要在文件开头加入 # -*- coding: UTF-8 -*-(EMAC写法) 或者 #coding=utf-8 就行了. 源代码文件中,若包含中文编码,则需要注意两点: ...

  10. thinkphp3.2.3 版本使用redis缓存添加认证

    我在使用thinkphp3.2.3的时候 发现如果是使用redis缓存 设置了认证的redis能连接成功 却无法 set 操作 ,检查发现是没有认证导致的  $redis->auth这一步没有, ...