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();
}
}
}