2

以下にリストされているこれらのリンクをすべてたどっていますが、このSMALL create ExcelおよびDownload関数を作成する最良の方法を見つけました。(EPPlus for Excel を使用)

これを実行するたびにエラーなしでコードを完全に実行しますが、ダウンロードするファイルを「キックアウト」しません(ダイアログとして保存または w/e で)。

public ActionResult ShowReport()
    {
        using (var stream = new MemoryStream())
        {

            ExcelPackage pck = new ExcelPackage();
            var ws = pck.Workbook.Worksheets.Add("Sample1");

            ws.Cells["A1"].Value = "Sample 1";
            ws.Cells["A1"].Style.Font.Bold = true;
            var shape = ws.Drawings.AddShape("Shape1", eShapeStyle.Rect);
            shape.SetPosition(50, 200);
            shape.SetSize(200, 100);
            shape.Text = "Sample 1 text text text";

            var fileDownloadName = "sample.xlsx";
            var contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";//System.Net.Mime.MediaTypeNames.Application.Octet
            var fileStream = new MemoryStream();
            pck.SaveAs(fileStream);
            fileStream.Position = 0;

            var fsr = new FileStreamResult(fileStream, contentType);
            fsr.FileDownloadName = fileDownloadName;

            byte[] fileBytes = ReadToEnd(fileStream);
            string fileName = "example";
            return File(fileBytes, contentType, fileName);
        }
    }

私は何を間違っていますか/行方不明ですか? - その対話を自分で書かなければなりませんか?

PN: 私もこの方法を試みました

 byte[] fileBytes = ReadToEnd(fileStream);
 string fileName = "example";
 return File(fileBytes, contentType, fileName);

もちろん、ストリームをバイトに変換する方法を見つけなければなりませんでしたが、何も表示されませんでした。

Chrome のネットワーク開発ツールの ここに画像の説明を入力 画像 サポートしているブラウザを使用している場合、画像が小さくて申し訳ありません (ctl+MouseWheel でスクロールできない場合)。

4

2 に答える 2

3

(上記のコメント スレッドへの応答として。)

投稿された画像から、実際のファイル リクエスト (リストの最後のもの) は、通常のドキュメント レベルのリクエストではなく、JavaScript コードから来ているように見えます。このことから、サーバー側のコードが正しく機能し、正しい応答を返す可能性が高くなります。

ただし、これは AJAX リクエストであるため、ブラウザは実際にレスポンスをどう処理するかを知りません。ここにはいくつかの潜在的な解決策があります。理想的には、これを通常のリクエストにして、可能であれば画像から AJAX を削除することをお勧めします。それができない場合でも、JavaScript からドキュメント レベルのリクエストを開始できます。これと同じくらい簡単なもの:

window.location = '@Url.Action("Method", "Controller")';

これは、現在のように JavaScript コードから開始されますが、AJAX 要求ではなくブラウザー全体に対して開始されます。これでうまくいくはずです。

于 2013-09-24T13:38:21.093 に答える