2

我正在使用 EPPlus 库将数据写入 Excel。我希望能够在 HTTP 响应对象中写入精细的内容并将其发送,以便客户端然后将文件保存为对话框并可以选择保存文件的位置。

到目前为止,在网上搜索了很多之后,我仍然没有成功,这是我的代码片段 -

我试过了 -

using (ExcelPackage package = new ExcelPackage())
{
    //Writing data to the worksheet

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

所有在线链接都显示相同的代码,但这仍然不起作用。也没有客户端或服务器端错误。

有什么想法吗?

编辑:因此,如果此代码有效,那么调用此代码的客户端可能存在一些问题?我对请求响应模型没有太多经验,我很有可能搞砸了。

我已经发出了一个包含要写入文件的内容的发布请求 -

$post("/app/Services/ExcelDownloadHandler.ashx", { "columnValues": columnValues });

在 ExcelDownloadHandler.ashx 中,我有

    public void ProcessRequest(HttpContext context)
    {
        var r = context.Response;
        Models.DTData excelData = (Models.DTData)Newtonsoft.Json.JsonConvert.DeserializeObject(context.Request.Form["columnValues"], typeof(Models.DTData));

        //Write excelData to worksheet using EPPlus

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

//一旦我对响应进行二进制写入,我应该会在浏览器上看到文件保存对话框,对吗?

4

2 回答 2

1

我有同样的问题。添加此处显示的四个注释行会出现提示,允许用户在 IE11 中打开、保存或另存为。

//Write it back to the client Response.ClearContent(); //Clear contents of current Response. Response.BufferOutput = true; //Buffer output before sending. Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; Response.AddHeader("content-disposition", "attachment; filename=ExportData.xlsx"); Response.BinaryWrite(pck.GetAsByteArray()); Response.Flush(); //Send buffered output to client. Response.End(); //Stop rqst. process; Raise EndRequest event.

于 2015-10-01T12:40:07.037 回答
0

我使用 EPPLUS 如下代码:

            MemoryStream ms = new MemoryStream();
            pkg.SaveAs(ms);
            byte[] ba = ms.GetBuffer();
            HttpContext.Current.Response.ClearContent();
            HttpContext.Current.Response.AddHeader("Content-Disposition", "attachement; filename=ExportData.xlsx");
            HttpContext.Current.Response.AddHeader("Content-Length", ba.Length.ToString());
            HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
            HttpContext.Current.Response.BinaryWrite(ba);
            HttpContext.Current.Response.Flush();
            HttpContext.Current.Response.End();
于 2018-09-16T11:01:03.983 回答