下载Excel文件

我之前已经问过这个问题,但是在启动文件下载方面仍然有困难。

var fileName = "ExcelData.xlsx"; var file = new FileInfo(fileName); using (var package = new OfficeOpenXml.ExcelPackage(file)) { var worksheet = package.Workbook.Worksheets.FirstOrDefault(x => x.Name == "Employee Data"); if (package.Workbook.Worksheets.FirstOrDefault(x => x.Name == "Employee Data") == null) { worksheet = package.Workbook.Worksheets.Add("Employee Data"); } else { package.Workbook.Worksheets.Delete(1); worksheet = package.Workbook.Worksheets.Add("Employee Data"); } worksheet.Cells[1, 1].Value = "Date start"; worksheet.Cells[1, 2].Value = "Name"; var rowCounter = 2; foreach (var v in users) { string dt = v.DateAdded.ToString(); worksheet.Cells[rowCounter, 1].Value = dt; worksheet.Cells[rowCounter, 2].Value = v.Name; rowCounter++; } package.Workbook.Properties.Title = "Employee Data"; System.Web.HttpResponse response = System.Web.HttpContext.Current.Response; response.Clear(); response.Buffer = true; response.Charset = ""; response.ContentType = "application/vnd.openxmlformats- officedocument.spreadsheetml.sheet"; response.AddHeader("content-disposition", "attachment;filename=ExcelData.xlsx"); response.BinaryWrite(package.GetAsByteArray()); } 

由于目前没有错误发生,但下载也没有触发。 如何触发下载,以便生成的文件保存到默认的下载文件夹

你为什么不返回一个FileContentResult

由于您正在使用的Excel库可以返回该表作为一个字节数组,这可以为你工作。

在你的控制器中,你可以像这样返回FileContentResult

 return File(package.GetAsByteArray(), "application/xlsx", "YourReportName.xlsx"); 

所以你可以从你的代码中删除这个块:

 System.Web.HttpResponse response = System.Web.HttpContext.Current.Response; response.Clear(); response.Buffer = true; response.Charset = ""; response.ContentType = "application/vnd.openxmlformats- officedocument.spreadsheetml.sheet"; response.AddHeader("content-disposition", "attachment;filename=ExcelData.xlsx"); response.BinaryWrite(package.GetAsByteArray()); 

如上所示返回文件。

只要注意你必须添加一个using语句到你的控制器的System.Web.Mvc

试试你的代码:

 Response.Flush(); Response.Close(); Response.End(); 

它立即输出结果。