在我的MVC 5站点中,我有一个稳定的导出到Excel功能,但用户要求我使列标题“用户友好”.
在我的模型中,我使用[Display(Name =“Friendly Column Name”)]注释,它们在View页面上按预期显示,但是当用户触发导出功能时它们不会转移到导出的Excel文件.相反,出现真实姓名.
我知道我可以通过除LoadFromCollection之外的其他方法加载工作表单元格,但我想知道是否仍然可以使用LoadFromCollection并使用模型的Display(Name())注释.
这就是我目前拥有的:
public ActionResult ExportToExcel(string _selectedCampus) { // This is the query result set the user wishes to export to file. IEnumerable<Mia1aSec1FayExport> exportQuery = unitOfWork .Mia1aSec1FayRepository.Get().Select(n => new Mia1aSec1FayExport { Campus = n.Campus,StudentName = n.StudentName,CreditsBeforeSchoolYear = n.CreditsBeforeSchoolYear,CreditsDuringSemester1 = n.CreditsDuringSemester1,EligibleFayCount = n.EligibleFayCount,EligibleFayMeetingGoal = n.EligibleFayMeetingGoal }).Where(n => n.Campus == _selectedCampus).OrderBy(n => n.StudentName) .AsEnumerable(); // The current iteration saves the table contents,but without the // [Display{Name"xxx)] annotation from the model. byte[] response; using (var excelFile = new ExcelPackage()) { excelFile.Workbook.Properties.Title = "MIA 1A (i) Eligible FAY Students"; var worksheet = excelFile.Workbook.Worksheets.Add("Sheet1"); worksheet.Cells["A1"] .LoadFromCollection(Collection: exportQuery,PrintHeaders: true); response = excelFile.GetAsByteArray(); } // Save dialog appears through browser for user to save file as desired. return File(response,"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","Mia1aSec1Fay.xlsx"); }
一种解决方法是覆盖标题单元格,但这是不可取的,原因有两个:(1)我已经在模型中将列名称写为注释,这意味着我现在在两个不同的地方写了相同的信息,并且(2) )我必须手动保持信息同步,以防用户需要更多更改,我可能会忘记这样做.
// This loads teh table as seen by the user in the index view. worksheet.Cells["A1"].LoadFromCollection(Collection: exportQuery,PrintHeaders: true); // Workaround overwrite header cells,as I'm not able to use Display Name annotation. worksheet.Cells[1,1].Value = "Campus"; worksheet.Cells[1,2].Value = "Student Name"; worksheet.Cells[1,3].Value = "Credits Before SY"; worksheet.Cells[1,4].Value = "Credits During Semester 1"; worksheet.Cells[1,5].Value = "Legible Population"; worksheet.Cells[1,6].Value = "Eligible Students Earning 2+ Credits";