List数据源生成HSSFWorkbook通用方法:

public class WorkBook
{
public static HSSFWorkbook BuildSwitchData<T>(string SheetName, List<T> list, Dictionary<string, string> FiedNames)
{
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = (HSSFSheet)wb.CreateSheet(SheetName); //创建工作表
sheet.CreateFreezePane(0, 1); //冻结列头行
HSSFRow row_Title = (HSSFRow)sheet.CreateRow(0); //创建列头行
row_Title.HeightInPoints = 30.5F; //设置列头行高
HSSFCellStyle cs_Title = (HSSFCellStyle)wb.CreateCellStyle(); //创建列头样式
cs_Title.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center; //水平居中
cs_Title.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center; //垂直居中
HSSFFont cs_Title_Font = (HSSFFont)wb.CreateFont(); //创建字体
cs_Title_Font.IsBold = true; //字体加粗
cs_Title_Font.FontHeightInPoints = 14; //字体大小
cs_Title.SetFont(cs_Title_Font); //将字体绑定到样式
#region 生成列头
int ii = 0;
foreach (string key in FiedNames.Keys)
{
HSSFCell cell_Title = (HSSFCell)row_Title.CreateCell(ii); //创建单元格
cell_Title.CellStyle = cs_Title; //将样式绑定到单元格
cell_Title.SetCellValue(key);
sheet.SetColumnWidth(ii, 25 * 256);//设置列宽
ii++;
} #endregion
//获取 实体类 类型对象
Type t = typeof(T); // model.GetType();
//获取 实体类 所有的 公有属性
List<PropertyInfo> proInfos = t.GetProperties(BindingFlags.Instance | BindingFlags.Public).ToList();
//创建 实体属性 字典集合
Dictionary<string, PropertyInfo> dictPros = new Dictionary<string, PropertyInfo>();
//将 实体属性 中要修改的属性名 添加到 字典集合中 键:属性名 值:属性对象
proInfos.ForEach(p =>
{
if (FiedNames.Values.Contains(p.Name))
{
dictPros.Add(p.Name, p);
}
}); HSSFCellStyle cs_Content = (HSSFCellStyle)wb.CreateCellStyle(); //创建列头样式
cs_Content.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center; //水平居中
cs_Content.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center; //垂直居中
for (int i = 0; i < list.Count; i++)
{ HSSFRow row_Content = (HSSFRow)sheet.CreateRow(i + 1); //创建行
row_Content.HeightInPoints = 20;
int jj = 0;
foreach (string proName in FiedNames.Values)
{
if (dictPros.ContainsKey(proName))
{
HSSFCell cell_Conent = (HSSFCell)row_Content.CreateCell(jj); //创建单元格
cell_Conent.CellStyle = cs_Content; //如果存在,则取出要属性对象
PropertyInfo proInfo = dictPros[proName];
//获取对应属性的值
object value = proInfo.GetValue(list[i], null); //object newValue = model.uName;
string cell_value = value == null ? "" : value.ToString();
cell_Conent.SetCellValue(cell_value);
jj++;
}
}
}
return wb; }
}

MVC控制器调用方法并以流的形式下载:

     public ActionResult ProcessRequest()
{
try
{
fangcanpyEntities db = new fangcanpyEntities();
List<Models.order> list = db.order.AsNoTracking().ToList();//获取List数据 可自行获取
Dictionary<string, string> FiedNames = new Dictionary<string, string>();
FiedNames.Add("订单编号", "order_no");
FiedNames.Add("下单时间", "add_time");
FiedNames.Add("会员编号", "uid");
FiedNames.Add("收件人", "accept_name");
FiedNames.Add("电话号码", "mobile");
FiedNames.Add("收件地址", "address");
FiedNames.Add("订单金额", "order_amount"); string sExportFileName = "";
HSSFWorkbook wb = null;
wb = WorkBook.BuildSwitchData<Models.order>("订单",list, FiedNames);//调用通用方法
sExportFileName = "订单" + "_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls";//设置下载文件的名称
MemoryStream stream = new MemoryStream();
wb.Write(stream);
var buf = stream.ToArray();
return File(buf, "pplication/vnd.ms-excel", sExportFileName); }
catch
{
return Content("");
}
}

  

最新文章

  1. nodejs在Liunx上的部署生产方式-PM2
  2. Android反编译(三)之重签名
  3. Android - 广播接收者 - BroadcastReceiver
  4. expdp\impdp及exp\imp
  5. Scala 深入浅出实战经典 第44讲: scala中view bounds代码实例
  6. java 开发, jdk 1.6 官方下载地址
  7. Codeforces Round #333 (Div. 1) B. Lipshitz Sequence 倍增 二分
  8. [改善Java代码]子列表只是原列表的一个视图
  9. 【HDU 4372】 Count the Buildings (第一类斯特林数)
  10. html5之表格元素
  11. Scheme r5rs letrec的用法
  12. 【bzoj 4407】于神之怒加强版
  13. java - day008 -final ,static ,访问控制符.
  14. 一个月薪两万的Web安全工程师要掌握哪些技能?
  15. Kotlin入门学习笔记
  16. 福州大学软件工程1816 | W班 团队Alpha阶段成绩汇总排名(第9、10次作业)
  17. SpringBoot系统列 2 - 配置文件,多环境配置(dev,qa,online)
  18. window apidoc的安装和使用
  19. arm GIC介绍之一【转】
  20. python中关于if-else使用性能的一点感悟

热门文章

  1. Git bash 终止git log 命令
  2. php开发规范-psr系列规范
  3. 8.spring:事务管理(上):Spring的数据库编程、编程式事务管理
  4. 1、ClassLoader.getResourceAsStream() 与Class.getResourceAsStream()的区别
  5. 51Nod - 1205 (流水先调度)超级经典的贪心 模板题
  6. ORA-04044: 此处不允许过程, 函数, 程序包或类型和
  7. Python 学习笔记(九)Python元组和字典(二)
  8. iOS开发学习资源
  9. vue+element-ui中的图片获取与上传
  10. 简单几行代码使用百度地图API接口分页获取信息