下载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();
它立即输出结果。