首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >强制下载流-强制下载excel文件

强制下载流-强制下载excel文件
EN

Stack Overflow用户
提问于 2012-09-12 21:11:45
回答 2查看 4K关注 0票数 1

我正在使用MemoryStream API和EPPlus在内存中创建一个excel文件,用于创建excel文档。

我创建excel文件的代码基本上如下所示:

代码语言:javascript
复制
public Stream GetXlsDocument(IQueryable data)
{

    const string sheetName = "Sheet1";
    var file = new FileInfo("test2.xls");

    MemoryStream stream = new MemoryStream();
    using (ExcelPackage p = new ExcelPackage(stream))
    {
        p.Workbook.Worksheets.Add(sheetName);

        ExcelWorksheet ws = p.Workbook.Worksheets[1];
        ws.Name = sheetName;
        ws.Cells.Style.Font.Size = 11;
        ws.Cells.Style.Font.Name = "Calibri";

        // Headers
        ws.SetValue(1, 1, "Some data");

        p.SaveAs(stream);
    }

    stream.Position = 0;
    return stream;
}

然后,我的另一个函数应该将该流作为下载提供给用户。我试着这样做:

代码语言:javascript
复制
var file = Documents.GetXlsDocument();

var memoryStream = new MemoryStream();
file.CopyTo(memoryStream);

Response.Clear();
Response.ContentType = "application/force-download";
Response.AddHeader("content-disposition", "attachment; filename=nfile.xls");
Response.BinaryWrite(memoryStream.ToArray());
Response.End();

这确实显示了一个下载对话框。但是当我打开我的excel文件时,整个excel文档都充满了垃圾(我猜二进制数据是用字符串表示的)。

我不知道我做错了什么。

有没有人知道怎样才能让excel文件以一种好的格式下载?也许EPPlus已经有了解决这个问题的方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-12 22:24:12

不要在构造函数中添加流。保持构造函数为空。

因此,更改这一行:

代码语言:javascript
复制
using (ExcelPackage p = new ExcelPackage(stream))

要这样做:

代码语言:javascript
复制
using (ExcelPackage p = new ExcelPackage())
票数 2
EN

Stack Overflow用户

发布于 2012-09-12 21:15:04

对于'Response.ContentType‘,使用application/octet-stream作为类型。这将告诉大多数浏览器将该文件视为数据,它不应下载其他内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12388990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档