EPPlus 导出模型到 Excel:System.NullReferenceException
EPPlus export model to 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: Object reference not set to an instance of an object.
可能的罪魁祸首是:
- 空工作表
- 空新文件
- 空审计
这很令人费解,因为当我在 VS 的调试模式下 运行 它可以工作,但是当它 运行 离开生产服务器时出现空异常错误。
代码示例中有什么明显的错误吗?
您不能(当然不应该)尝试从 Web 应用程序直接保存到用户的文件系统。
我怀疑你的空引用在 Environment.SpecialFolders...
对象中的某处。
最好 return 将文件作为字节数组来响应您的控制器操作。这样用户就可以选择将文件保存在他们自己的文件系统中。像这样的东西应该可以解决问题:
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");
}
我有一个可以正确显示模型的 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: Object reference not set to an instance of an object.
可能的罪魁祸首是:
- 空工作表
- 空新文件
- 空审计
这很令人费解,因为当我在 VS 的调试模式下 运行 它可以工作,但是当它 运行 离开生产服务器时出现空异常错误。
代码示例中有什么明显的错误吗?
您不能(当然不应该)尝试从 Web 应用程序直接保存到用户的文件系统。
我怀疑你的空引用在 Environment.SpecialFolders...
对象中的某处。
最好 return 将文件作为字节数组来响应您的控制器操作。这样用户就可以选择将文件保存在他们自己的文件系统中。像这样的东西应该可以解决问题:
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");
}