网站关键词设置,珠海网站建设科技公司,学做网站需要多久,海报设计素材网站免费前言#xff1a;
这段时间一直专注于数据报表的开发#xff0c;当然涉及到相关报表的开发数据导出肯定是一个不可避免的问题啦。客户要求要导出优雅#xff0c;美观的Excel文档格式的来展示数据#xff0c;当时的第一想法就是使用NPOI开源库来做数据导出Excel文档#xf…前言
这段时间一直专注于数据报表的开发当然涉及到相关报表的开发数据导出肯定是一个不可避免的问题啦。客户要求要导出优雅美观的Excel文档格式的来展示数据当时的第一想法就是使用NPOI开源库来做数据导出Excel文档当时想想真香网上随便搜一搜教程一大堆但是当自己真正的实践起来才知道原来想要给不同的单元格设置相关的字体样式、边框样式以及单元格样式一个简单的样式需要写这么多行代码来实现。作为一个喜欢编写简洁代码的我而言肯定是受不了的于是乎提起袖子说干就干我自己根据网上的一些资料自己封装了一个通用的NPOI导出Excel帮助类主要包括行列创建行内单元格常用样式封装如字体样式字体颜色字体大小单元格背景颜色单元格边框单元格内容对齐方式等常用属性希望在以后的开发中能够使用到并且也希望能够帮助到更多有需要的同学。
一、引入NPOI NuGet
NPOI GitHub源码地址 https://github.com/tonyqus/npoi 版本说明 NPOI 2.4.1 注意不同版本可能使用的姿势有点小差别 程序包管理器控制台输入一下命令安装
Install-Package NPOI -Version 2.4.1
通过NuGet管理解决方案安装
选择工具NuGet包管理器程序包管理器控制台 搜索NPOI进行安装 二、导出Excel文档内容展示格式如下如所示 三、CellStyle单元格常用样式概述
HSSFCellStyle cellStyle (HSSFCellStyle)workbook.CreateCellStyle(); //创建列头单元格实例样式
cellStyle.Alignment hAlignment; //水平布局方式HorizontalAlignment hAlignment
cellStyle.VerticalAlignment vAlignment; //垂直布局方式VerticalAlignment vAlignment
cellStyle.WrapText false;//是否自动换行//TODO:十分注意要设置单元格背景色必须是FillForegroundColor和FillPattern两个属性同时设置否则是不会显示背景颜色
//如下设置黄色背景色
cellStyle.FillForegroundColor cellBackgroundColor;//单元格背景颜色short cellBackgroundColor HSSFColor.Yellow.Index
cellStyle.FillPattern fillPattern;//填充图案样式(FineDots 细点SolidForeground立体前景isAddFillPatterntrue时存在FillPattern fillPattern FillPattern.SolidForeground//设置单元格边框样式
//常用的边框样式 None(没有),Thin(细边框瘦的),Medium(中等),Dashed(虚线),Dotted(星罗棋布的),Thick(厚的),Double(双倍),Hair(头发)[上右下左顺序设置]
cellStyle.BorderBottom BorderStyle.Thin;
cellStyle.BorderRight BorderStyle.Thin;
cellStyle.BorderTop BorderStyle.Thin;
cellStyle.BorderLeft BorderStyle.Thin;//设置单元格边框颜色[上右下左顺序设置]
cellStyle.TopBorderColor HSSFColor.DarkGreen.Index;//DarkGreen(黑绿色)
cellStyle.RightBorderColor HSSFColor.DarkGreen.Index;
cellStyle.BottomBorderColor HSSFColor.DarkGreen.Index;
cellStyle.LeftBorderColor HSSFColor.DarkGreen.Index;
四、Font字体常用属性概述
var cellStyleFont (HSSFFont)workbook.CreateFont();//创建字体对象实例
//假如字体大小只需要是粗体的话直接使用下面该属性即可
cellStyleFont.IsBold true;//或者通过下面属性设置字体weight来设置字体是否加粗
cellStyleFont.Boldweight boldWeight; //字体加粗字体加粗 (None 0,Normal 400Bold 700
cellStyleFont.FontHeightInPoints fontHeightInPoints; //字体大小short fontHeightInPoints
cellStyleFont.FontName fontName;//字体仿宋楷体宋体
cellStyleFont.Color fontColor;//设置字体颜色short fontColor HSSFColor.Black.Index
cellStyleFont.IsItalic true;//是否将文字变为斜体true是false否
cellStyleFont.Underline underlineStyle;//字体下划线下划线样式无下划线[None],单下划线[Single],双下划线[Double],会计用单下划线[SingleAccounting],会计用双下划线[DoubleAccounting]
cellStyleFont.TypeOffset typeOffset;//字体上标下标字体上标下标(普通默认值[None],上标[Sub],下标[Super]),即字体在单元格内的上下偏移量
cellStyleFont.IsStrikeout true;//是否显示删除线true显示false不显示
五、NPOI HSSFColor 颜色索引对照表:
说明通过对相关属性的介绍我们可以清楚的知道无论是字体颜色表格边框颜色还是单元格背景颜色我们都需要用到HSSFColor对象中的颜色属性索引该索引的字符类型为short类型。
HSSFColor颜色索引对照表如下表所示
表格来源https://www.cnblogs.com/Brainpan/p/5804167.html 潘小博1992
颜色Class名称(注意由于NPOI的版本原因我们在使用对应Class名称时首字母可能需要小写)short Black8 Brown60 Olive_Green59 Dark_Green58 Dark_Teal56 Dark_Blue18 Indigo62 Grey_80_PERCENT63 Dark_Red16 Orange53 DARK_YELLOW19 Green17 Teal21 Blue12 Blue_Grey54 Grey_50_PERCENT23 Red10 LIGHT_ORANGE52 LIME50 SEA_GREEN57 AQUA49 LIGHT_BLUE48 VIOLET20 GREY_40_PERCENT55 Pink14 Gold51 Yellow13 BRIGHT_GREEN11 TURQUOISE15 SKY_BLUE40 Plum61 GREY_25_PERCENT22 Rose45 Tan47 LIGHT_YELLOW43 LIGHT_GREEN42 LIGHT_TURQUOISE41 PALE_BLUE44 LAVENDER46 White9 CORNFLOWER_BLUE24 LEMON_CHIFFON26 MAROON25 ORCHID28 CORAL29 ROYAL_BLUE30 LIGHT_CORNFLOWER_BLUE31 AUTOMATIC64 六、关于NPOI对Excel中的行列常用操作方法概述
创建Excel工作表给工作表赋一个名称(Excel底部名称)
var sheet workbook.CreateSheet(人才培训课程表);创建Excel中指定的行: /// summary/// TODO:先创建行然后在创建对应的列/// 创建Excel中指定的行/// /summary/// param namesheetExcel工作表对象/param/// param namerowNum创建第几行(从0开始)/param/// param namerowHeight行高/parampublic HSSFRow CreateRow(ISheet sheet, int rowNum, float rowHeight){HSSFRow row (HSSFRow)sheet.CreateRow(rowNum); //创建行row.HeightInPoints rowHeight; //设置列头行高return row;}
创建行内指定的单元格: /// summary/// 创建行内指定的单元格/// /summary/// param namerow需要创建单元格的行/param/// param namecellStyle单元格样式/param/// param namecellNum创建第几个单元格(从0开始)/param/// param namecellValue给单元格赋值/param/// returns/returnspublic HSSFCell CreateCells(HSSFRow row, HSSFCellStyle cellStyle, int cellNum, string cellValue){HSSFCell cell (HSSFCell)row.CreateCell(cellNum); //创建单元格cell.CellStyle cellStyle; //将样式绑定到单元格if (!string.IsNullOrWhiteSpace(cellValue)){//单元格赋值cell.SetCellValue(cellValue);}return cell;}
指定合并的行列: //TODO:关于Excel行列单元格合并问题(注意合并单元格后只需对第一个位置赋值即可)/**第一个参数从第几行开始合并第二个参数到第几行结束合并第三个参数从第几列开始合并第四个参数到第几列结束合并**/CellRangeAddress region new CellRangeAddress(0, 0, 0, 5);sheet.AddMergedRegion(region);cell.SetCellValue(人才培训课程表);//TODO:顶部标题
设置单元格的列宽
sheet.SetColumnWidth(单元格索引,1000);//设置对应列宽单元格索引从0开始后面接宽度 七、NPOI生成Excel文档完整代码
NPOI之Excel数据导出帮助类创建Excel表格行列设置行高设置字体样式单元格边框样式单元格背景颜色和样式单元格内容对齐方式等常用属性和样式封装:
/*** Author:追逐时光* DescriptionNpoi之Excel数据导出帮助类创建Excel表格行列设置行高设置字体样式单元格边框样式单元格背景颜色和样式单元格内容对齐方式等常用属性和样式封装* Description2020年3月29日*/
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.HSSF.Util;namespace YY_Utility
{public class NpoiExcelExportHelper{private static NpoiExcelExportHelper _exportHelper;public static NpoiExcelExportHelper _{get _exportHelper ?? (_exportHelper new NpoiExcelExportHelper());set _exportHelper value;}/// summary/// TODO:先创建行然后在创建对应的列/// 创建Excel中指定的行/// /summary/// param namesheetExcel工作表对象/param/// param namerowNum创建第几行(从0开始)/param/// param namerowHeight行高/parampublic HSSFRow CreateRow(ISheet sheet, int rowNum, float rowHeight){HSSFRow row (HSSFRow)sheet.CreateRow(rowNum); //创建行row.HeightInPoints rowHeight; //设置列头行高return row;}/// summary/// 创建行内指定的单元格/// /summary/// param namerow需要创建单元格的行/param/// param namecellStyle单元格样式/param/// param namecellNum创建第几个单元格(从0开始)/param/// param namecellValue给单元格赋值/param/// returns/returnspublic HSSFCell CreateCells(HSSFRow row, HSSFCellStyle cellStyle, int cellNum, string cellValue){HSSFCell cell (HSSFCell)row.CreateCell(cellNum); //创建单元格cell.CellStyle cellStyle; //将样式绑定到单元格if (!string.IsNullOrWhiteSpace(cellValue)){//单元格赋值cell.SetCellValue(cellValue);}return cell;}/// summary/// 行内单元格常用样式设置/// /summary/// param nameworkbookExcel文件对象/param/// param namehAlignment水平布局方式/param/// param namevAlignment垂直布局方式/param/// param namefontHeightInPoints字体大小/param/// param nameisAddBorder是否需要边框/param/// param nameboldWeight字体加粗 (None 0,Normal 400Bold 700/param/// param namefontName字体仿宋楷体宋体微软雅黑...与Excel主题字体相对应/param/// param nameisAddBorderColor是否增加边框颜色/param/// param nameisItalic是否将文字变为斜体/param/// param nameisLineFeed是否自动换行/param/// param nameisAddCellBackground是否增加单元格背景颜色/param/// param namefillPattern填充图案样式(FineDots 细点SolidForeground立体前景isAddFillPatterntrue时存在)/param/// param namecellBackgroundColor单元格背景颜色当isAddCellBackgroundtrue时存在/param/// param namefontColor字体颜色/param/// param nameunderlineStyle下划线样式无下划线[None],单下划线[Single],双下划线[Double],会计用单下划线[SingleAccounting],会计用双下划线[DoubleAccounting]/param/// param nametypeOffset字体上标下标(普通默认值[None],上标[Sub],下标[Super]),即字体在单元格内的上下偏移量/param/// param nameisStrikeout是否显示删除线/param/// returns/returnspublic HSSFCellStyle CreateStyle(HSSFWorkbook workbook, HorizontalAlignment hAlignment, VerticalAlignment vAlignment, short fontHeightInPoints, bool isAddBorder, short boldWeight, string fontName 宋体, bool isAddBorderColor true, bool isItalic false, bool isLineFeed false, bool isAddCellBackground false, FillPattern fillPattern FillPattern.NoFill, short cellBackgroundColor HSSFColor.Yellow.Index, short fontColor HSSFColor.Black.Index, FontUnderlineType underlineStyle FontUnderlineType.None, FontSuperScript typeOffset FontSuperScript.None, bool isStrikeout false){HSSFCellStyle cellStyle (HSSFCellStyle)workbook.CreateCellStyle(); //创建列头单元格实例样式cellStyle.Alignment hAlignment; //水平居中cellStyle.VerticalAlignment vAlignment; //垂直居中cellStyle.WrapText isLineFeed;//自动换行//背景颜色边框颜色字体颜色都是使用 HSSFColor属性中的对应调色板索引关于 HSSFColor 颜色索引对照表详情参考https://www.cnblogs.com/Brainpan/p/5804167.html//TODO引用了NPOI后可通过ICellStyle 接口的 FillForegroundColor 属性实现 Excel 单元格的背景色设置FillPattern 为单元格背景色的填充样式//TODO:十分注意要设置单元格背景色必须是FillForegroundColor和FillPattern两个属性同时设置否则是不会显示背景颜色if (isAddCellBackground){cellStyle.FillForegroundColor cellBackgroundColor;//单元格背景颜色cellStyle.FillPattern fillPattern;//填充图案样式(FineDots 细点SolidForeground立体前景)}//是否增加边框if (isAddBorder){//常用的边框样式 None(没有),Thin(细边框瘦的),Medium(中等),Dashed(虚线),Dotted(星罗棋布的),Thick(厚的),Double(双倍),Hair(头发)[上右下左顺序设置]cellStyle.BorderBottom BorderStyle.Thin;cellStyle.BorderRight BorderStyle.Thin;cellStyle.BorderTop BorderStyle.Thin;cellStyle.BorderLeft BorderStyle.Thin;}//是否设置边框颜色if (isAddBorderColor){//边框颜色[上右下左顺序设置]cellStyle.TopBorderColor HSSFColor.DarkGreen.Index;//DarkGreen(黑绿色)cellStyle.RightBorderColor HSSFColor.DarkGreen.Index;cellStyle.BottomBorderColor HSSFColor.DarkGreen.Index;cellStyle.LeftBorderColor HSSFColor.DarkGreen.Index;}/*** 设置相关字体样式*/var cellStyleFont (HSSFFont)workbook.CreateFont(); //创建字体//假如字体大小只需要是粗体的话直接使用下面该属性即可//cellStyleFont.IsBold true;cellStyleFont.Boldweight boldWeight; //字体加粗cellStyleFont.FontHeightInPoints fontHeightInPoints; //字体大小cellStyleFont.FontName fontName;//字体仿宋楷体宋体 cellStyleFont.Color fontColor;//设置字体颜色cellStyleFont.IsItalic isItalic;//是否将文字变为斜体cellStyleFont.Underline underlineStyle;//字体下划线cellStyleFont.TypeOffset typeOffset;//字体上标下标cellStyleFont.IsStrikeout isStrikeout;//是否有删除线cellStyle.SetFont(cellStyleFont); //将字体绑定到样式return cellStyle;}}
}
生成并保存指定的Excel文档内容
using System;
using System.IO;
using Microsoft.AspNetCore.Hosting;
using NPOI.HSSF.UserModel;
using NPOI.HSSF.Util;
using NPOI.SS.UserModel;
using NPOI.SS.Util;
using YY_Utility;namespace YY_Services
{/// summary/// Excel文档生成并保存操作类/// /summarypublic class NpoiExcelOperationService{private static IHostingEnvironment _environment;public NpoiExcelOperationService(IHostingEnvironment iEnvironment){_environment iEnvironment;}/// summary/// Excel数据导出简单示例/// /summary/// param nameresultMsg导出结果/param/// param nameexcelFilePath保存excel文件路径/param/// returns/returnspublic bool ExcelDataExport(out string resultMsg, out string excelFilePath){var result true;excelFilePath ;resultMsg successfully;//Excel导出名称string excelName 人才培训课程表;try{//首先创建Excel文件对象var workbook new HSSFWorkbook();//创建工作表也就是Excel中的sheet给工作表赋一个名称(Excel底部名称)var sheet workbook.CreateSheet(人才培训课程表);//sheet.DefaultColumnWidth 20;//默认列宽sheet.ForceFormulaRecalculation true;//TODO:是否开始Excel导出后公式仍然有效非必须#region table 表格内容设置#region 标题样式//设置顶部大标题样式var cellStyleFont NpoiExcelExportHelper._.CreateStyle(workbook, HorizontalAlignment.Center, VerticalAlignment.Center, 20, true, 700, 楷体, true, false, false, true, FillPattern.SolidForeground, HSSFColor.Coral.Index, HSSFColor.White.Index,FontUnderlineType.None, FontSuperScript.None, false);//第一行表单var row NpoiExcelExportHelper._.CreateRow(sheet, 0, 28);var cell row.CreateCell(0);//合并单元格 例 第1行到第2行 第3列到第4列围成的矩形区域//TODO:关于Excel行列单元格合并问题/**第一个参数从第几行开始合并第二个参数到第几行结束合并第三个参数从第几列开始合并第四个参数到第几列结束合并**/CellRangeAddress region new CellRangeAddress(0, 0, 0, 5);sheet.AddMergedRegion(region);cell.SetCellValue(人才培训课程表);//合并单元格后只需对第一个位置赋值即可TODO:顶部标题cell.CellStyle cellStyleFont;//二级标题列样式设置var headTopStyle NpoiExcelExportHelper._.CreateStyle(workbook, HorizontalAlignment.Center, VerticalAlignment.Center, 15, true, 700, 楷体, true, false, false, true, FillPattern.SolidForeground, HSSFColor.Grey25Percent.Index, HSSFColor.Black.Index,FontUnderlineType.None, FontSuperScript.None, false);//表头名称var headerName new[] { 课程类型, 序号, 日期, 课程名称, 内容概要, 讲师简介 };row NpoiExcelExportHelper._.CreateRow(sheet, 1, 24);//第二行for (var i 0; i headerName.Length; i){cell NpoiExcelExportHelper._.CreateCells(row, headTopStyle, i, headerName[i]);//设置单元格宽度if (headerName[i] 讲师简介 || headerName[i] 内容概要){sheet.SetColumnWidth(i, 10000);}else{sheet.SetColumnWidth(i, 5000);}}#endregion#region 单元格内容信息//单元格边框样式var cellStyle NpoiExcelExportHelper._.CreateStyle(workbook, HorizontalAlignment.Center, VerticalAlignment.Center, 10, true, 400);//左侧列单元格合并 begin//TODO:关于Excel行列单元格合并问题合并单元格后只需对第一个位置赋值即可/**第一个参数从第几行开始合并第二个参数到第几行结束合并第三个参数从第几列开始合并第四个参数到第几列结束合并**/CellRangeAddress leftOne new CellRangeAddress(2, 7, 0, 0);sheet.AddMergedRegion(leftOne);CellRangeAddress leftTwo new CellRangeAddress(8, 11, 0, 0);sheet.AddMergedRegion(leftTwo);//左侧列单元格合并 endvar currentDate DateTime.Now;string[] curriculumList new[] { 艺术学, 设计学, 材料学, 美学, 心理学, 中国近代史, 管理人员的情绪修炼, 高效时间管理, 有效的目标管理, 沟通与协调 };int number 1;for (var i 0; i 10; i){row NpoiExcelExportHelper._.CreateRow(sheet, i 2, 20); //sheet.CreateRow(i2);//在上面表头的基础上创建行switch (number){case 1:cell NpoiExcelExportHelper._.CreateCells(row, cellStyle, 0, 公共类课程);break;case 7:cell NpoiExcelExportHelper._.CreateCells(row, cellStyle, 0, 管理类课程);break;}//创建单元格列公众类课程cell NpoiExcelExportHelper._.CreateCells(row, cellStyle, 1, number.ToString());cell NpoiExcelExportHelper._.CreateCells(row, cellStyle, 2, currentDate.AddDays(number).ToString(yyyy-MM-dd));cell NpoiExcelExportHelper._.CreateCells(row, cellStyle, 3, curriculumList[i]);cell NpoiExcelExportHelper._.CreateCells(row, cellStyle, 4, 提升充实拓展自己综合实力);cell NpoiExcelExportHelper._.CreateCells(row, cellStyle, 5, 追逐时光_ number 号金牌讲师);number;}#endregion#endregionstring folder DateTime.Now.ToString(yyyyMMdd);//保存文件到静态资源文件夹中wwwroot,使用绝对路径var uploadPath _environment.WebRootPath /UploadFile/ folder /;//excel保存文件名string excelFileName excelName _ DateTime.Now.ToString(yyyyMMddHHmmss) .xls;//创建目录文件夹if (!Directory.Exists(uploadPath)){Directory.CreateDirectory(uploadPath);}//Excel的路径及名称string excelPath uploadPath excelFileName;//使用FileStream文件流来写入数据传入参数为文件所在路径对文件的操作方式对文件内数据的操作var fileStream new FileStream(excelPath, FileMode.OpenOrCreate, FileAccess.ReadWrite);//向Excel文件对象写入文件流生成Excel文件workbook.Write(fileStream);//关闭文件流fileStream.Close();//释放流所占用的资源fileStream.Dispose();//excel文件保存的相对路径提供前端下载var relativePositioning /UploadFile/ folder / excelFileName;excelFilePath relativePositioning;}catch (Exception e){result false;resultMsg e.Message;}return result;}}
}
总结
学习工作生活都一样很多东西都需要我们自己动手去尝试我们才能真正的品尝到其中的味道收获不一样的惊喜。本文主要是个人在工作和学习中的一些总结希望能够帮助有需要的同学别忘了给我star哟。
相关实例链接地址
GitHub完整实例地址 https://github.com/YSGStudyHards/NPOI-ExportWordAndExcel-ImportExcelData .NET Core使用NPOI导出复杂美观的Excel详解 https://www.cnblogs.com/Can-daydayup/p/12501400.html .NET Core使用NPOI导出复杂Word详解 https://www.cnblogs.com/Can-daydayup/p/11588531.html .NET Core使用NPOI将Excel中的数据批量导入到MySQL https://www.cnblogs.com/Can-daydayup/p/12593165.html