2019年07月09日 NPOI导出Excel(C#,.NET)

NPOI导出Excel(C#,.NET)

前言
  需求:使用NPOI导出Excel
  技术: NPOI
  语言: C# .NET MVC

代码
(注:下面的代码无法复制正常运行,需进行对应业务绑定后方可执行)

//NPOI导出,核心功能
public static XSSFWorkbook npoiGetExcelContent()
{
   //重点! XSSFWorkbook 操作 Office2007及以上版本
   //      HSSFWorkbook 操作 Office2003版本(07以前)
   
   //建立空白工作簿
   XSSFWorkbook wb = new XSSFWorkbook();
   //在工作簿中:建立空白工作表
   Sheet sheet = wb.CreateSheet("Sheet1");
   
  //设置字体样式
   IFont font = wb.CreateFont();
   font.FontName = "方正小标宋简体";
   font.Boldweight = short.MaxValue;
   font.FontHeightInPoints = 22;//二号
   
  //设置单元格的样式:水平垂直对齐居中,外边框黑色
  ICellStyle cellStyle = wb.CreateCellStyle();
  cellStyle.Alignment = HorizontalAlignment.Center;
  cellStyle.VerticalAlignment = VerticalAlignment.Center;
  cellStyle.BorderBottom = BorderStyle.Thin;
  cellStyle.BorderLeft = BorderStyle.Thin;
  cellStyle.BorderRight = BorderStyle.Thin;
  cellStyle.BorderTop = BorderStyle.Thin;
  cellStyle.BottomBorderColor = HSSFColor.Black.Index;
  cellStyle.LeftBorderColor = HSSFColor.Black.Index;
  cellStyle.RightBorderColor = HSSFColor.Black.Index;
  cellStyle.TopBorderColor = HSSFColor.Black.Index;
  cellStyle.WrapText = true;//自动换行
  cellStyle.SetFont(cellfont);
  #endregion
  //大标题表头
  IRow headRow = sheet.CreateRow(0);
  headRow.CreateCell(0).SetCellValue("汇总表");
  headRow.GetCell(0).CellStyle = titleCellStyle;
  //合并单元格
  ///<param>firstRow(行从0开始,下同)</param>
  ///<param>lastRow</param>
  ///<param>firstCol(列)</param>
  ///<param>lastCol</param>
  sheet.AddMergedRegion(new CellRangeAddress(0, 0, 0, 6));
  
  //设置单元格宽
  //小标题行表头(256 * X)X为英文字数
  sheet.SetColumnWidth(0, 256 * 20);
  sheet.SetColumnWidth(1, 256 * 30);
            
  //赋值内容,并赋予单元格样式
  row.CreateCell(row).SetCellValue(“数据库中对应的字段值,string类型”);          
  row.GetCell(row).CellStyle = cellStyle;
            
  //导出Excel
  System.IO.MemoryStream ms = new System.IO.MemoryStream();
  wb.Write(ms);
  System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.xlsx", DateTime.Now.ToString("汇总表-yyyy年MM月dd日 HH时mm分ss秒")));
  System.Web.HttpContext.Current.Response.BinaryWrite(ms.ToArray());
  wb = null;
  ms.Close();
  ms.Dispose();
  return wb;        
}

本次需求解决方案中存在的不足:
  1.命名规范欠缺
  2.为了方便,没有抽象出方法,严重耦合
  3.代码健壮性差,缺少一些必要的空值判断

Coding过程中遇到的问题及解决办法:
1. 在合并单元格的时候,导出XSSFWorkbook文件,打开Excel后,提示错误,有不可见内容,已删除部分合并单元格。实际正常合并。疑似NPOI BUG。改为HSSFWorkbook格式后导出,问题解决。

更多参考NPOI教程请看:https://www.jianshu.com/p/d352a7f09228

寄语
  第一次使用NPOI这项技术,在这之前使用Application方式进行word、Excel导出。两门技术各有利弊,在此不予论述。
  NPOI导出Excel本身不复杂, 复杂的地方在于业务上构建Excel表格样式结构。


如有疑问,欢迎探讨。同时也虚心接受各位前辈的意见与建议。欢迎留言。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值