将Excel包下载为文件而不创建物理文件?

时间:2015-03-25 11:37:55

标签: c# excel file filestream epplus

我正在寻找将文件下载到客户端PC的代码,我不想存储物理文件,并担心在以后删除它。 目前我创建了一个物理文件,然后下载它,文件名保持不变,因此它取代了前一个文件。我担心的是,当两个用户同时尝试下载时,最终可能会覆盖该文件。

以下是我的一些代码:

using (var package = new ExcelPackage(existingFile))
{
   // edit cells and add details into the excel file

   //Here u save the file, i would like this to be a stream
   using (FileStream aFile = new FileStream(MapPath("../../template/LeadsExport.xlsx"), FileMode.Create))
   {
      try
      {
         package.SaveAs(aFile);
         aFile.Close();
      }
      catch (Exception ex)
      {
      }
    }
      // Here i download the file, i would like this to use a stream and not a physical file
      FileInfo file = new FileInfo(MapPath("../../template/LeadsExport.xlsx"));
      Response.Clear();
      Response.ClearHeaders();
      Response.ClearContent();
      Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
      Response.AddHeader("Content-Length", file.Length.ToString());
      Response.ContentType = "text/plain";
      Response.Flush();
      Response.TransmitFile(file.FullName);
      Response.End();

}

我希望将软件包保存到文件流中,而不是物理文件,然后以某种方式下载它。

1 个答案:

答案 0 :(得分:3)

在代码和问题文本中,你已经有了一半的答案。而不是将Excel包写入磁盘,而是将其写入响应流。

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