public class ExcelPatientModel
{
public string PatientName
{
get; set;
}
public string PatientId
{
get; set;
}
public string Sex
{
get; set;
}
public string Age
{
get; set;
}
public string Birthdate
{
get; set;
}
}
public class ExcelConstruct<T>
{
public string[] Headers
{
get; set;
}
public Func<T, object>[] Propertys
{
get; set;
}
public List<T> Datas
{
get; set;
}
}
public static class ExcelHelper
{
public static void AddSheet<T>(this ExcelPackage package, string sheetName, ExcelConstruct<T> excel)
{
var sheet = package.Workbook.Worksheets.Add(sheetName);
sheet.OutLineApplyStyle = true;
for (var i = 0; i < excel.Headers.Length; i++)
{
sheet.Cells[1, i + 1].Value = excel.Headers[i];
sheet.Cells[1, i + 1].Style.Font.Bold = true;
}
for (var i = 0; i < excel.Datas.Count; i++)
{
for (var j = 0; j < excel.Propertys.Length; j++)
{
sheet.Cells[i + 2, j + 1].Value = excel.Propertys[j](excel.Datas[i]);
}
}
}
}
public async Task<ExcelConstruct<ExcelPatientModel>> GetExcel(List<string> checkHeaders)
{
var dictionary = new Dictionary<string, Func<T, object>>
{
{ "patientName", new Func<ExcelPatientModel, object>(p => GetValueOrNA(p.PatientName)) },
{ "patientId", new Func<ExcelPatientModel, object>(p => GetValueOrNA(p.PatientId)) },
{ "patientAge", new Func<ExcelPatientModel, object>(p => GetValueOrNA(p.Age) )},
{ "sex", new Func<ExcelPatientModel, object>(p => GetValueOrNA(p.Sex)) },
{ "Birthdate", new Func<ExcelPatientModel, object>(p => GetValueOrNA(p.Birthdate) )}
};
var headers = dictionary.Keys.Select(_ => $"{_localizer[_]}").ToArray().Intersect(checkHeaders);
var propertys = dictionary.Where(_ => headers.Contains(_localizer[_.Key])).Select(_ => _.Value);
var datas = new List<ExcelPatientModel>();
return new ExcelConstruct<ExcelPatientModel>
{
Headers = headers.ToArray(),
Propertys = propertys.ToArray(),
Datas = datas
};
}
nuget依赖:EPPlus.Core