c# - 使用 ClosedXML 下载文件

标签 c# asp.net 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();

谢谢

最佳答案

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

关于c# - 使用 ClosedXML 下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22296136/

相关文章:

c# - MonoTouch项目中使用RedLaserSDK的例子

c# - AForge 傅里叶变换

c# - 如何使用 int 检查 MySQL 数据库中是否存在某些内容,或者是否有其他选择?

c# - ClosedXML 格式化单元格以包含公式

c# - 在 C# 中读取 Excel 数据和单元格格式

C# WinForms 标签将显示,但不显示文本

c# - 为什么 GDI 不允许我删除大图像?

asp.net - 如何使用版本控制使编译的代码库在多个网站上保持最新?

.net - 在 ASP.NET MVC 控件中放置可重用代码的最佳位置?

c# - 使用 closedXML 和 C# 将一系列单元格值放入列表中