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

//応答に対して binarywrite を実行すると、ブラウザに [ファイルの保存] ダイアログが表示されるはずですが、正しいですか?

4

2 に答える 2

1

私は同じ問題を抱えていました。ここに示す 4 つのコメント行を追加すると、ユーザーが 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 に答える