2020-07-19

NPOI封装通用的导出模板

  在后台管理系统中导出Excel功能是必不可少的,该模板可以帮助我们简单优雅的实现导出功能,支持导出大数据。封装如下:

  public class NPOIExcelExporterBase {  protected ICellStyle HeadStyle { get; set; }  protected ICellStyle TextStyle { get; set; }  /// <summary>  /// 创建Excel 文件  /// </summary>  /// <param name="fileName">Excel文件名</param>  /// <param name="creator">委托</param>  /// <returns></returns>  protected string CreateExcel(string fileName, Action<IWorkbook> creator)  {   var wb = new XSSFWorkbook();   var sWorkbook = new SXSSFWorkbook(wb, 1000);   var outputFilePath = "";   try   {    HeadStyle = DefaultHeaderCellStyle(sWorkbook);    TextStyle = DefaulTextCellStyle(sWorkbook);    creator(sWorkbook);    outputFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, fileName);    using (var fs = new FileStream(outputFilePath, FileMode.Create, FileAccess.Write))    {     sWorkbook.Write(fs);    }   }   finally   {    sWorkbook.Dispose();   }   return outputFilePath;  }  /// <summary>  /// 添加表头  /// </summary>  protected void AddHeader(ISheet sheet, params string[] headerTexts)  {   if (headerTexts == null || headerTexts.Length == 0)   {    return;   }   ICell cell;   var headerRow = sheet.CreateRow(0);   for (var i = 0; i < headerTexts.Length; i++)   {    cell = headerRow.CreateCell(i);    cell.SetCellValue(headerTexts[i]);    cell.CellStyle = HeadStyle;    //根据字节长度计算列宽    sheet.SetColumnWidth(i, (Encoding.GetEncoding("gb2312").GetBytes(headerTexts[i]).Length + 10) * 256);   }  }  /// <summary>  /// 添加表格内容  /// </summary>  protected void AddBody<T>(ISheet sheet, IList<T> list, params Func<T, object>[] propertySelectors)  {   if (list == null || !list.Any())   {    return;   }   if (propertySelectors == null || !propertySelectors.Any())   {    return;   }   IRow row;   ICell cell;   var startRowIndex = 1;   foreach (var item in list)   {    row = sheet.CreateRow(startRowIndex++);    for (var i = 0; i < propertySelectors.Length; i++)    {     cell = row.CreateCell(i);     cell.SetCellValue(propertySelectors[i](item)?.ToString());     cell.CellStyle = TextStyle;    }   }  }  /// <summary>  /// 默认表头样式  /// </summary>  /// <param name="workbook"></param>  /// <returns></returns>  private ICellStyle DefaultHeaderCellStyle(IWorkbook workbook)  {   var format = workbook.CreateDataFormat();   var cellStyle = workbook.CreateCellStyle();   cellStyle.Alignment = HorizontalAlignment.Center;   cellStyle.VerticalAlignment = VerticalAlignment.Center;   cellStyle.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.Yellow.Index;   cellStyle.FillPattern = FillPattern.SolidForeground;   cellStyle.DataFormat = format.GetFormat("@");   cellStyle.BorderBottom = BorderStyle.Thin;   cellStyle.BorderLeft = BorderStyle.Thin;   cellStyle.BorderRight = BorderStyle.Thin;   cellStyle.BorderTop = BorderStyle.Thin;   cellStyle.BottomBorderColor = NPOI.HSSF.Util.HSSFColor.Grey25Percent.Index;   cellStyle.LeftBorderColor = NPOI.HSSF.Util.HSSFColor.Grey25Percent.Index;   cellStyle.RightBorderColor = NPOI.HSSF.Util.HSSFColor.Grey25Percent.Index;   cellStyle.TopBorderColor = NPOI.HSSF.Util.HSSFColor.Grey25Percent.Index;   var headFont = workbook.CreateFont();   headFont.FontHeightInPoints = 11;   headFont.IsBold = true;   cellStyle.SetFont(headFont);   return cellStyle;  }  /// <summary>  /// 默认单元格文本样式  /// </summary>  /// <param name="workbook"></param>  /// <returns></returns>  private ICellStyle DefaulTextCellStyle(IWorkbook workbook)  {   var format = workbook.CreateDataFormat();   var cellStyle = workbook.CreateCellStyle();   cellStyle.Alignment = HorizontalAlignment.Center;   cellStyle.VerticalAlignment = VerticalAlignment.Center;   cellStyle.WrapText = false;   cellStyle.DataFormat = format.GetFormat("@");   cellStyle.BorderBottom = BorderStyle.Thin;   cellStyle.BorderLeft = BorderStyle.Thin;   cellStyle.BorderRight = BorderStyle.Thin;   cellStyle.BorderTop = BorderStyle.Thin;   cellStyle.BottomBorderColor = NPOI.HSSF.Util.HSSFColor.Grey25Percent.Index;   cellStyle.LeftBorderColor = NPOI.HSSF.Util.HSSFColor.Grey25Percent.Index;   cellStyle.RightBorderColor = NPOI.HSSF.Util.HSSFColor.Grey25Percent.Index;   cellStyle.TopBorderColor = NPOI.HSSF.Util.HSSFColor.Grey25Percent.Index;   var curFont = workbook.CreateFont();   curFont.FontHeightInPoints = 10;   cellStyle.SetFont(curFont);   return cellStyle;  } }

下面是使用的示例:

 public class Person {  public string Name { get; set; }  public int Age { get; set; }  public DateTime Birthday { get; set; } } public sealed class ExportPersonExcel : NPOIExcelExporterBase {  public string Export(List<Person> list)  {   var excelPath =    CreateExcel("PersonList.xlsx", workbook =>    {     var sheet = workbook.CreateSheet();     //HeadStyle = HeaderCellStyle(workbook); //替换默认的表头样式     //表头     AddHeader(sheet,      "姓名", "年龄", "出生日期");     //表格内容     AddBody(sheet, list,      ex => ex.Name,      ex => ex.Age,      ex => ex.Birthday.ToString("yyyy-MM-dd"));     //sheet.SetColumnWidth(0, 20 * 256); //修改列的宽度    });   return excelPath;  }  /// <summary>  /// 表头样式  /// </summary>  /// <param name="workbook"></param>  /// <returns></returns>  private ICellStyle HeaderCellStyle(IWorkbook workbook)  {   var cellStyle = workbook.CreateCellStyle();   cellStyle.Alignment = HorizontalAlignment.Center;   cellStyle.VerticalAlignment = VerticalAlignment.Center;   cellStyle.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.Red.Index;   cellStyle.FillPattern = FillPattern.SolidForeground;   cellStyle.BorderBottom = BorderStyle.Thin;   cellStyle.BorderLeft = BorderStyle.Thin;   cellStyle.BorderRight = BorderStyle.Thin;   cellStyle.BorderTop = BorderStyle.Thin;   cellStyle.BottomBorderColor = NPOI.HSSF.Util.HSSFColor.Grey25Percent.Index;   cellStyle.LeftBorderColor = NPOI.HSSF.Util.HSSFColor.Grey25Percent.Index;   cellStyle.RightBorderColor = NPOI.HSSF.Util.HSSFColor.Grey25Percent.Index;   cellStyle.TopBorderColor = NPOI.HSSF.Util.HSSFColor.Grey25Percent.Index;   var headFont = workbook.CreateFont();   headFont.FontHeightInPoints = 11;   headFont.IsBold = true;   cellStyle.SetFont(headFont);   return cellStyle;  } }  static void Main(string[] args)  {   var list = new List<Person>()   {    new Person{Name = "Tony",Age = 20,Birthday = DateTime.Now},    new Person{Name = "Jack",Age = 23,Birthday = DateTime.Now},    new Person{Name = "张三",Age = 56,Birthday = DateTime.Now},    new Person{Name = "李四",Age = 36,Birthday = DateTime.Now}   };   var exporter = new ExportPersonExcel();   var path = exporter.Export(list);   Console.WriteLine("导出成功");  } 

导出效果图如下:

 

NPOI封装通用的导出模板贝贝官网刘小东墩煌网速速行动!这些品牌已被律所代理,你还在卖吗?"抗病毒"挂绳遭美国海关截获,类似产品在亚马逊上出售?刷单系统如何搭建?所谓"稳重"的刷单方法....新疆喀纳斯景区旅游出行游玩指南介绍2017年必游十大城市:伦敦旅游居首,香港旅游位居第八吉林雾凇岛经典游玩攻略全指南

No comments:

Post a Comment