使用ClosedXML下载文件

已检查

所有

如何下载文件,以便用户看到文件正在下载(例如流)?

我当前正在使用ClosedXML,但是如果使用SaveAs方法,则必须提供一个硬编码的URL,如果仅提供文件名,它不会自动下载到下载文件夹中。

下面的方法很好用,但是我必须创建自己的基于HTML的excel文件,并且文件的增长幅度超出了应有的程度,当我使用ClosedXML时,该文件的大小仅占文件大小的50%或更小下面的代码:但是,下载行为是我希望的样子。

有没有一种方法可以转换下面的代码,以便可以将“工作簿”作为对象,而它只是下载此工作簿?

HttpContext.Current.Response.AppendHeader("Content-Disposition","attachment;filename=Excel.xls");
HttpContext.Current.Response.Charset ="UTF-8";    
HttpContext.Current.Response.ContentEncoding=System.Text.Encoding.Default;
HttpContext.Current.Response.ContentType = "application/ms-excel";
ctl.Page.EnableViewState =false;   
System.IO.StringWriter  tw = new System.IO.StringWriter() ;
System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter (tw);
ctl.RenderControl(hw);
HttpContext.Current.Response.Write(tw.ToString());
HttpContext.Current.Response.End();

谢谢

Raidri支持Monica

SaveAs()方法支持流,因此我将ClosedXml工作簿作为流使用:

public Stream GetStream(XLWorkbook excelWorkbook)
{
    Stream fs = new MemoryStream();
    excelWorkbook.SaveAs(fs);
    fs.Position = 0;
    return fs;
}

然后下载文件:

string myName = Server.UrlEncode(ReportName + "_" + DateTime.Now.ToShortDateString() + ".xlsx");
MemoryStream stream = GetStream(ExcelWorkbook);

Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition", "attachment; filename=" + myName);
Response.ContentType = "application/vnd.ms-excel";
Response.BinaryWrite(stream.ToArray());
Response.End();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章