编程语言
首页 > 编程语言> > c#-EPPlus将模型导出到Excel:System.NullReferenceException

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