【问题标题】:Downloading Excel File下载 Excel 文件
【发布时间】:2015-01-22 13:59:23
【问题描述】:

我之前问过这个问题,但在启动文件下载时仍然遇到困难。

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());
}

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

【问题讨论】:

  • 尝试注释掉 response.Clear();行。

标签: c# asp.net-mvc excel download epplus


【解决方案1】:

为什么不返回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 语句。

【讨论】:

    【解决方案2】:

    尝试您的代码:

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

    它立即输出结果。

    【讨论】:

      猜你喜欢
      • 2020-01-13
      • 1970-01-01
      • 1970-01-01
      • 2018-02-12
      • 2017-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多