2014-11-05 108 views
0

我使用EPPLUS来生成Excel文件。我有代码将其保存到服务器,但我无法弄清楚如何允许客户端下载Excel工作表。用户单击按钮并将其下载到他们在浏览器中设置的位置。我发现客户端下载代码here,我不能去工作......这不是在Firebug或提琴手允许客户端下载Excel文件

抛出一个错误的JQuery

$('#ExcelExport').on('click', function() { 
    $.post("/Reports/ExportToExcel", function (data) { 
     alert("The Export was Succussful"); 
    }) 
    .fail(function() { 
     alert("The Export has Failed"); 
}); 

C#

public ActionResult ExportToExcel() 
{ 

    using (ExcelPackage package = new ExcelPackage()) 
    { 
     // Get Data 
     var excelData = _repository.ExcelData(); 

     //Basic Info 
     package.Workbook.Properties.Author = "MEO System"; 
     package.Workbook.Properties.Title = "PendingMEOs"; 

     //Excel worksheet 
     package.Workbook.Worksheets.Add("Pending MEOs"); 
     ExcelWorksheet ws = package.Workbook.Worksheets[1]; // 1 is the position of the worksheet 
     ws.Name = "Pending MEOs"; 

     //adds the data to the excel sheet and formats the data 
     ws.Cells.LoadFromCollection(excelData, true, OfficeOpenXml.Table.TableStyles.Medium6); 

     //sets the cell width to fit the contents 
     ws.Cells["A1:L" + excelData.Count()].AutoFitColumns(); 

     // Save the Excel file 
     Response.Clear(); 
     Response.AddHeader("content-disposition", "attachment; filename=PendingMEOS.xlsx"); 
     Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
     Response.BinaryWrite(package.GetAsByteArray()); 
     Response.End(); 
    } 

    return Json(new { success = true }); 
} 

将代码保存到服务器,但不是我想要的

string path = "C:\\PendingMEOS.xlsx"; 

Byte[] bin = package.GetAsByteArray(); 
System.IO.File.WriteAllBytes(path, bin); 

回答

1

问题是您直接写入响应流,但然后返回Json结果。

看看MVC Controller Using Response Stream

+0

加入'返回新EmptyResult(后);'它说,它是成功的,但浏览器不会通知您下载的,我无法找到它,所以我不认为它实际上在任何地方下载。我是否缺少一些代码来下载它? – joetinger 2014-11-05 19:58:15

+1

您的文章成功处理程序只提醒成功消息,并没有对数据做任何事情。如果您的意图只是下载文件,请尝试直接链接到/ Reports/ExportToExcel。 – Vince 2014-11-05 20:08:14

+0

谢谢,这就是我一直在寻找的! – joetinger 2014-11-05 20:17:47