共享一个MVC4通过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 }

共享一个MVC4通过NPOI导出excel的通用方法,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。