2015-01-21 84 views
3

我已经问过这个问题,但在启动文件下载时仍然有困难。正在下载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()); 
} 

由于目前没有错误发生,但下载也没有触发。如何触发下载,这样生成的文件是你的代码后

+0

尝试注释掉response.Clear();线。 – 2015-01-21 11:37:30

回答

3

为什么不返回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()); 

,就回到了文件,如上图所示。

请注意,您必须向您的控制器添加使用声明System.Web.Mvc

2

尝试保存到默认的下载文件夹:

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

它立即输出结果。