我之前已经问过这个问题,但我仍然难以启动文件下载。
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 :(得分:6)
为什么不退回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
添加一个using语句。
答案 1 :(得分:2)
尝试使用您的代码:
Response.Flush();
Response.Close();
Response.End();
立即输出结果。