NPOI _导出exl(简单应用)
1. 导出exl表格,创建表格导出到客户端
public static MemoryStream Export_Table<T>(List<T> datalist) { MemoryStream ms = new MemoryStream(); var members = typeof(T).GetProperties(); var workbook = new NPOI.HSSF.UserModel.HSSFWorkbook(); NPOI.SS.UserModel.ISheet sheet = workbook.CreateSheet(); NPOI.SS.UserModel.IRow headerRow = sheet.CreateRow(0); int order = 1; foreach (var meber in members)//初始化标题 { string titlevalue = ""; var name = meber.GetCustomAttributes(typeof(TableAttribulate), false); if (name.Length == 0) continue; var pro = name[0] as TableAttribulate; if (pro == null) continue; titlevalue = pro.CName; var cell = headerRow.CreateCell(order); cell.SetCellValue(titlevalue); if(pro.Weight==0) sheet.AutoSizeColumn(order,true); else { sheet.SetColumnWidth(order,pro.Weight); } cell.CellStyle = GetStyle(workbook); cell.CellStyle.Alignment = pro.HorizontalAlignment; var cellfont = workbook.CreateFont(); cellfont.Boldweight = (short)NPOI.SS.UserModel.FontBoldWeight.Bold; cell.CellStyle.SetFont(cellfont); order++; } int rowIndex = 1; foreach (var row in datalist) { NPOI.SS.UserModel.IRow dataRow = sheet.CreateRow(rowIndex); int colIndex = 0; var cellindex = dataRow.CreateCell(colIndex); cellindex.SetCellValue(rowIndex); cellindex.CellStyle = GetStyle(workbook); var cellfont = workbook.CreateFont(); cellfont.Boldweight = (short)NPOI.SS.UserModel.FontBoldWeight.Normal; cellfont.Color = NPOI.HSSF.Util.HSSFColor.LightBlue.Index; cellindex.CellStyle.SetFont(cellfont); colIndex++; foreach (var meber in members) { var name = meber.GetCustomAttributes(typeof(TableAttribulate), false); if (name.Length == 0) continue; var pro = name[0] as TableAttribulate; if (pro == null) continue; //if (pro.Weight == 0) // sheet.AutoSizeColumn(colIndex, true); //设置成动态的,自动大小时就很慢,这里注掉,如果要用,想别的办法 var cell = dataRow.CreateCell(colIndex); var mebervalue = meber.GetValue(row); cell.SetCellValue(mebervalue == null ? "" : mebervalue.ToString()); cell.CellStyle = GetStyle(workbook); cell.CellStyle.Alignment = pro.HorizontalAlignment; colIndex++; } rowIndex++; } workbook.Write(ms); ms.Seek(0, SeekOrigin.Begin); return ms;// }
2.代码总的特性
public class TableAttribulate:Attribute { public TableAttribulate(string name, int weight = 0, NPOI.SS.UserModel.HorizontalAlignment hoalign = NPOI.SS.UserModel.HorizontalAlignment.Center) { CName = name; Weight = weight; HorizontalAlignment = hoalign; } public string CName { get; set; } public int Weight { get; set; } public NPOI.SS.UserModel.HorizontalAlignment HorizontalAlignment { get; set; }//对齐方式 }
3.函数样式
public static NPOI.SS.UserModel.ICellStyle GetStyle(NPOI.HSSF.UserModel.HSSFWorkbook workbook) { var cs = workbook.CreateCellStyle(); cs.DataFormat = NPOI.HSSF.UserModel.HSSFDataFormat.GetBuiltinFormat("@"); cs.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin; cs.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin; cs.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin; cs.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin; cs.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center; cs.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center; var cellfont = workbook.CreateFont(); cellfont.Boldweight = (short)NPOI.SS.UserModel.FontBoldWeight.Normal; cs.SetFont(cellfont); return cs; }
老版的:
public static NPOI.SS.UserModel.ICellStyle GetDefaultStyle(XSSFWorkbook workbook) { var cs = workbook.CreateCellStyle(); cs.DataFormat = NPOI.HSSF.UserModel.HSSFDataFormat.GetBuiltinFormat("@"); cs.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin; cs.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin; cs.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin; cs.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin; cs.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center; cs.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center; var cellfont = workbook.CreateFont(); cellfont.Boldweight = (short)NPOI.SS.UserModel.FontBoldWeight.Normal; cs.SetFont(cellfont); return cs; }
4.js调用实例
function func_queryExportExl() { var url = '@Url.Action("ExportExcel", "ResidentsSigned"); window.location.href = url; }
5.后端调用
List<TableExel> query = dbContext.Database.SqlQuery<TableExel>(sql).ToList();
var ms = CPSYS.Web.Common.FileOption.Export_Table<TableExel>(query); return File(ms, "application/vnd.ms-excel", "text.xls");
6.合并单元格后的边框格式问题
public void SetTyleThin(NPOI.HSSF.UserModel.HSSFWorkbook workbook,NPOI.SS.UserModel.ISheet sheet,int lastrow) { NPOI.SS.Util.CellRangeAddress region = new NPOI.SS.Util.CellRangeAddress(4, lastrow, 0, 23); ((NPOI.HSSF.UserModel.HSSFSheet)sheet).SetEnclosedBorderOfRegion(region, NPOI.SS.UserModel.BorderStyle.Thin, NPOI.HSSF.Util.HSSFColor.Black.Index); }
7.读入模板
HSSFWorkbook workbook = null; var path = AppDomain.CurrentDomain.BaseDirectory + "/ExcelTemplate/重点孕妇登记随访本.xls"; FileStream filest = new FileStream(path, FileMode.Open, FileAccess.Read); workbook = new HSSFWorkbook(filest); filest.Close(); NPOI.SS.UserModel.ISheet sheet = workbook.GetSheet("重点孕妇登记随访本");
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)