72 lines
2.5 KiB
C#
72 lines
2.5 KiB
C#
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
|
|
{
|
|
/// <summary>
|
|
/// 通用导入模板 Excel 生成辅助类(基于 TableColumnField 元数据)
|
|
/// </summary>
|
|
internal static class GenericExcelTemplateHelper
|
|
{
|
|
/// <summary>
|
|
/// 根据表配置生成导入模板 Excel 的二进制内容
|
|
/// </summary>
|
|
/// <param name="tableDisplayName">表中文名/标题</param>
|
|
/// <param name="columns">表字段配置</param>
|
|
/// <returns>Excel 文件字节数组</returns>
|
|
public static byte[] BuildTemplateBytes(string tableDisplayName, List<TableColumnField> 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();
|
|
}
|
|
}
|
|
}
|
|
|