using MESWebSite.CommonClass; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Web; namespace MESWebSite.Tool { public class ExcelTool { /// <summary> /// 导出Excel /// </summary> /// <typeparam name="T">导出的数据集合类型</typeparam> /// <param name="data">导出的数据集合</param> /// <param name="type">导出的Excel实体类型</param> /// <returns></returns> public XSSFWorkbook Export<T>(List<T> data, Type type) where T : class { XSSFWorkbook book = new XSSFWorkbook(); ISheet sheet = book.CreateSheet("Sheet1"); IRow hrow = sheet.CreateRow(0); PropertyInfo[] prop = type.GetProperties(); // 通过反射写入表头 WriteHeader(hrow, prop); // 通国反射写入内容 WriteContent(sheet, data, prop); return book; } public void WriteHeader(IRow row, PropertyInfo[] header) { for (int i = 0; i < header.Length; i++) { ICell cell = row.CreateCell(i); var col = header[i]; ExportHeaderAttribute attr = col.GetCustomAttribute<ExportHeaderAttribute>(); if (attr == null) { cell.SetCellValue(col.Name); } else { cell.SetCellValue(attr.HeaderName); } } } public void WriteContent<T>(ISheet sheet, List<T> data, PropertyInfo[] header) { for (int i = 0; i < data.Count; i++) { IRow row = sheet.CreateRow(i + 1); for (int j = 0; j < header.Length; j++) { ICell cell = row.CreateCell(j); T o = data[i]; var prop = o.GetType().GetProperty(header[j].Name); if (prop != null) { cell.SetCellValue(prop.GetValue(o).ToString()); } } } } } }