using OfficeOpenXml; using OfficeOpenXml.FormulaParsing.Excel.Functions.Math; using OfficeOpenXml.Style; using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Runtime.InteropServices; using VolPro.Core.UserManager; using VolPro.Core.Utilities; namespace VolPro.Core.Generic { /// /// 通用导入模板 Excel 生成辅助类(基于 TableColumnField 元数据) /// internal static class GenericExcelTemplateHelper { /// /// 根据表配置生成导入模板 Excel 的二进制内容 /// /// 表中文名/标题 /// 表字段配置 /// Excel 文件字节数组 public static byte[] BuildTemplateBytes(string tableDisplayName, List columns) { if (columns == null || columns.Count == 0) { return []; } //仅导出实际表字段 var exportColumns = columns .Where(c => c.IsDisplay == 1 && c.ReferenceField == 0) .ToList(); if (exportColumns.Count == 0) { return []; } using var package = new ExcelPackage(); string sheetName = string.IsNullOrWhiteSpace(tableDisplayName) ? (exportColumns.First().TableName ?? "sheet1") : tableDisplayName; var worksheet = package.Workbook.Worksheets.Add(sheetName); int colIndex = 1; foreach (var col in exportColumns) { worksheet.Cells[1, colIndex].Style.Fill.PatternType = ExcelFillStyle.Solid; worksheet.Cells[1, colIndex].Style.Fill.BackgroundColor.SetColor(col.IsNull == 0 ? Color.Red : Color.White); string columnName = col.ColumnName; worksheet.Cells[1, colIndex].Value = string.IsNullOrWhiteSpace(col.ColumnCnName) ? columnName : col.ColumnCnName.Translator(); colIndex++; } if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { // 自动列宽 if (worksheet.Dimension != null) { worksheet.Cells[worksheet.Dimension.Address].AutoFitColumns(); } } return package.GetAsByteArray(); } } }