using System.Reflection; using NPOI.SS.UserModel; using NPOI.SS.Util; using NPOI.XSSF.UserModel; namespace Infrastructure.Utilities.Excel; public class ExcelExporter { /// /// /// /// /// /// public static Response ExportToExcel(IEnumerable data, string headerTitle) where T : class { var workbook = new XSSFWorkbook(); var sheet = workbook.CreateSheet("Sheet1"); // 获取实体类的属性信息,并筛选出标记了ExcelColumnAttribute的特性 PropertyInfo[] properties = typeof(T).GetProperties() .Where(p => p.GetCustomAttribute() != null) .ToArray(); var rowIndex = 0; if (!string.IsNullOrEmpty(headerTitle)) { var headerTitleRow = sheet.CreateRow(rowIndex++); sheet.AddMergedRegion(new CellRangeAddress(0, 0, 0, properties.Length - 1)); var cell = headerTitleRow.CreateCell(0); cell.SetCellValue(headerTitle); var style = workbook.CreateCellStyle(); var font = workbook.CreateFont(); font.FontName = "方正小标宋简体"; font.FontHeightInPoints = 36; font.IsBold = true; style.SetFont(font); style.BorderBottom = BorderStyle.Thin; style.BorderLeft = BorderStyle.Thin; style.BorderRight = BorderStyle.Thin; style.BorderTop = BorderStyle.Thin; style.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center; style.VerticalAlignment = VerticalAlignment.Center; style.WrapText = true; cell.CellStyle = style; } // 写入表头 var headerRow = sheet.CreateRow(rowIndex++); for (var i = 0; i < properties.Length; i++) { // 自动调节列宽 sheet.AutoSizeColumn(i); var cell = headerRow.CreateCell(i); cell.SetCellValue(properties[i].GetCustomAttribute()?.HeaderName); // 应用表头样式 var headerStyleAttr = properties[i].GetCustomAttribute(); var style = workbook.CreateCellStyle(); if (headerStyleAttr != null) { var font = workbook.CreateFont(); font.FontName = headerStyleAttr.FontName; font.FontHeightInPoints = (short)headerStyleAttr.FontSize; font.IsBold = true; style.SetFont(font); // 填充模式 style.FillPattern = FillPattern.SolidForeground; style.WrapText = true; // 设置边框样式 style.BorderBottom = BorderStyle.Thin; style.BorderLeft = BorderStyle.Thin; style.BorderRight = BorderStyle.Thin; style.BorderTop = BorderStyle.Thin; style.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center; style.VerticalAlignment = VerticalAlignment.Center; } else { var font = workbook.CreateFont(); font.FontName = "Microsoft YaHei"; font.FontHeightInPoints = 12f; font.IsBold = true; style.SetFont(font); // 填充模式 style.FillPattern = FillPattern.SolidForeground; style.WrapText = true; // 设置边框样式 style.BorderBottom = BorderStyle.Thin; style.BorderLeft = BorderStyle.Thin; style.BorderRight = BorderStyle.Thin; style.BorderTop = BorderStyle.Thin; style.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center; style.VerticalAlignment = VerticalAlignment.Center; } cell.CellStyle = style; } foreach (var item in data) { var row = sheet.CreateRow(rowIndex++); for (var i = 0; i < properties.Length; i++) { var cell = row.CreateCell(i); cell.SetCellValue(properties[i].GetValue(item)?.ToString()); } } var response = new Response { Result = new MemoryStream() }; // MemoryStream中写入数据 workbook.Write(response.Result); workbook.Close(); response.Result.Close(); response.Result.Dispose(); response.Code = 200; response.Message = "获取成功"; return response; } }