• 共享一个MVC通过NPOI导出excel的通用方法


      1 public static System.IO.MemoryStream ExportExcel<T>(string title, List<T> objList, params string[] excelPropertyNames)
      2 {
      3     NPOI.SS.UserModel.IWorkbook workbook = new NPOI.HSSF.UserModel.HSSFWorkbook();
      4     NPOI.SS.UserModel.ISheet sheet = workbook.CreateSheet("Sheet1");
      5     NPOI.SS.UserModel.IRow row;
      6     NPOI.SS.UserModel.ICell cell;
      7     NPOI.SS.UserModel.ICellStyle cellStyle;
      8 
      9     int rowNum = 0;
     10     if (!string.IsNullOrEmpty(title))
     11     {
     12         #region 标题
     13         #region 标题样式
     14         cellStyle = workbook.CreateCellStyle();
     15         cellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
     16         cellStyle.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center;//垂直居中有问题
     17         NPOI.SS.UserModel.IFont font = workbook.CreateFont();
     18         font.FontHeightInPoints = 15;
     19         cellStyle.SetFont(font);
     20         #endregion
     21         row = sheet.CreateRow(rowNum);
     22         cell = row.CreateCell(0, NPOI.SS.UserModel.CellType.String);
     23         cell.SetCellValue(title);
     24         cell.CellStyle = cellStyle;
     25         sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 0, 0, excelPropertyNames.Length > 0 ? excelPropertyNames.Length - 1 : 0));
     26         rowNum++;
     27         #endregion
     28     }
     29 
     30     if (objList.Count > 0)
     31     {
     32         Type type = objList[0].GetType();
     33         if (type != null)
     34         {
     35             System.Reflection.PropertyInfo[] properties = type.GetProperties();
     36             if (properties.Length > 0)
     37             {
     38                 #region 表头
     39                 #region 表头样式
     40                 cellStyle = workbook.CreateCellStyle();
     41                 cellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
     42                 #endregion
     43                 if (excelPropertyNames.Length > 0)
     44                 {
     45                     row = sheet.CreateRow(rowNum);
     46                     int count = 0;
     47                     for (int m = 0; m < properties.Length; m++)
     48                     {
     49                         if (excelPropertyNames.Contains(properties[m].Name))
     50                         {
     51                             cell = row.CreateCell(count, NPOI.SS.UserModel.CellType.String);
     52                             string displayName = GetDisplayNameByPropertyName(properties[m].Name);
     53                             cell.SetCellValue(displayName == null ? "" : displayName);
     54                             cell.CellStyle = cellStyle;
     55                             count++;
     56                         }
     57                     }
     58                     rowNum++;
     59                 }
     60                 #endregion
     61 
     62                 #region 表体
     63                 if (excelPropertyNames.Length > 0)
     64                 {
     65                     for (int i = 0; i < objList.Count; i++)
     66                     {
     67                         row = sheet.CreateRow(i + rowNum);
     68                         int count = 0;
     69                         for (int j = 0; j < properties.Length; j++)
     70                         {
     71                             if (excelPropertyNames.Contains(properties[j].Name))
     72                             {
     73                                 cell = row.CreateCell(count);
     74                                 object obj = properties[j].GetValue(objList[i]);
     75                                 cell.SetCellValue(obj == null ? "" : obj.ToString());
     76                                 cell.CellStyle = cellStyle;
     77                                 count++;
     78                             }
     79                         }
     80                     }
     81                 }
     82                 #endregion
     83             }
     84         }
     85     }
     86     System.IO.MemoryStream ms = new System.IO.MemoryStream();
     87     workbook.Write(ms);
     88     return ms;
     89 }
     90 
     91 public static string GetDisplayNameByPropertyName(string propertyName)
     92 {
     93     string result = null;
     94     foreach (KeyValuePair<string,string> dic in NameDictionary())
     95     {
     96         if (dic.Key == propertyName)
     97         {
     98             result = dic.Value;
     99         }
    100         continue;
    101     }
    102     return result;
    103 }
    104 
    105 public static Dictionary<string, string> NameDictionary()
    106 {
    107     Dictionary<string, string> dic = new Dictionary<string, string>();
    108     dic.Add("AdminID", "编号");
    109 
    110     dic.Add("AdminName", "用户名");
    111 
    112     dic.Add("AdminMobile", "手机号");
    113 
    114     dic.Add("RealName", "真实姓名");
    115 
    116     return dic;
    117 }

    调用很简单

     1 public ActionResult Test()
     2 {
     3     int totalCount;
     4     List<AdminModel> adminModelList = adminBLL.GetPageList(1, 10, out totalCount);
     5     if (adminModelList == null)
     6     {
     7         adminModelList = new List<AdminModel>();
     8     }
     9     return File(ExcelHelper.ExportExcel<AdminModel>("表头", adminModelList, "AdminID", "AdminName", "AdminMobile", "RealName").ToArray(), "application/vnd.ms-excel", "工作簿.xls");
    10 }
    本文版权归作者和博客园共有,来源网址:http://www.cnblogs.com/tq1226112215/
    欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    em,pt和px之间的换算
    css中 中文字体(fontfamily)的标准英文名称
    HTML css面试题
    css实现的透明三角形
    JavaScript经典面试题系列
    C++ template 学习笔记(第二章)
    C++ template 学习笔记 (第五章)
    20120906
    C++ template 学习笔记(第十六章) 16.1 命名模版参数
    C++ template 学习笔记(第三,四章)
  • 原文地址:https://www.cnblogs.com/tq1226112215/p/3862377.html
Copyright © 2020-2023  润新知