【发布时间】:2016-09-14 14:19:09
【问题描述】:
我使用 OpenXML 和 MemoryStream 导出 Excel 文件,它有时会在文件路径中添加额外的字符。它不会每次都发生。当我第一次加载它时,它似乎工作得很好,但是在运行了一堆之后它开始添加额外的字符。我假设存在内存泄漏或缓冲区问题,但我对此了解的不够多,无法修复它。
我的代码是:
using (var stream = new MemoryStream())
{
report.CreatePackage(stream);
System.Web.HttpContext.Current.Response.Clear();
System.Web.HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";
System.Web.HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=Report_" + DateTime.Now.ToShortDateString() + ".xlsx");
stream.Position = 0;
stream.CopyTo(System.Web.HttpContext.Current.Response.OutputStream);
System.Web.HttpContext.Current.Response.Flush();
System.Web.HttpContext.Current.Response.Close();
System.Web.HttpContext.Current.Response.End();
}
它在文件路径中看起来像这样:Report_09_14_2016CAOFMLJL.xlsx 而不仅仅是报告和日期。
任何帮助将不胜感激。
【问题讨论】:
-
您知道
Response.Clear()不会清除标题吗?反过来说:在适当的地方致电Response.ClearHeaders()是否会改变任何事情走向幸福的结局? -
似乎在第一次运行它时,它仍然会添加额外的字符,但之后的每一次都有效。我不确定这是标题还是为什么它第一次不起作用。
-
代码与字符串不匹配。您正在添加
".xlsx",但结果中有".XLSX"扩展名(这种差异可能解释了为什么添加"CAOFMLJL.XLSX")。 -
抱歉打错了。换班很开心。它已被编辑以反映实际的文件名。
-
在我的机器上 DateTime.Now.ToShortDateString() 打印 14/09/2016,我猜它与系统设置有关。也许试试这个而不是 DateTime.Now.ToString("dd_MM_yyyy")。斜杠在 Windows 上的文件名中无效。
标签: c# openxml filepath memorystream