c#-EPPlus将模型导出到Excel:System.NullReferenceException
作者:互联网
我有一个MVC视图,可以正确显示模型.现在,我被要求在该页面上放置“导出到Excel”功能,我听说了EPPlus并尝试了一下.从this site开始,我以为我可以做些简单的事情.
根据我的需要进行更改后,我开发了此功能.当我在视图中测试功能时,它起作用了.我单击了HTML操作链接,并且Excel文件已正确保存.
public void ExportToExcel(IEnumerable<FourCourseAudit> audit)
{
string pathUser = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
string pathDownload = Path.Combine(pathUser, "Documents");
FileInfo newFile = new FileInfo(pathDownload + "\\MyExport.xslx");
using (var excelFile = new ExcelPackage(newFile))
{
var worksheet = excelFile.Workbook.Worksheets.FirstOrDefault(x=>x.Name=="Sheet1");
if (worksheet == null)
{
worksheet.Workbook.Worksheets.Add("Sheet1");
}
worksheet.Cells["A1"].LoadFromCollection(Collection:audit, PrintHeaders:true);
excelFile.Save();
}
}
但是,当我发布网站并以普通用户身份对其进行测试时,出现了可怕的“ Null Exception”错误:System.NullReferenceException:对象引用未设置为对象的实例.
可能的罪魁祸首是:
>空工作表
>空newFile
>空审核
令人费解的是,当我使用VS在调试模式下运行它时,它可以工作,但是在生产服务器上运行时会出现null异常错误.
我在代码示例中做错什么了吗?
解决方法:
您不能(当然应该)尝试从Web应用程序直接保存到用户的文件系统.
我怀疑您的空引用在Environment.SpecialFolders …对象中的某个位置.
最好将文件作为字节数组返回给控制器操作中的响应.这样,用户便可以选择将文件保存在自己的文件系统中.这样的事情应该可以解决问题:
public ActionResult ExportToExcel(IEnumerable<FourCourseAudit> audit)
{
byte[] response;
using (var excelFile = new ExcelPackage())
{
var worksheet = excelFile.Workbook.Worksheets.Add("Sheet1");
worksheet.Cells["A1"].LoadFromCollection(Collection:audit,PrintHeaders:true);
response = excelFile.GetAsByteArray();
}
return File(response, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Export.xlsx");
}
标签:asp-net-mvc-5,epplus,c 来源: https://codeday.me/bug/20191120/2041642.html