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