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表格样式结构。
如有疑问,欢迎探讨。同时也虚心接受各位前辈的意见与建议。欢迎留言。