3

EPPlus を使用してサーバー上で生成された Excel ファイルがあり、ファイルは正しく作成され、window.location を使用するとローカル マシンでは正常に動作しますが、サーバーにデプロイされたときには何もしません。MVC コントローラーを介して FileStreamResult を返そうとしていますが、機能しているとは思いません。コントローラー メソッドにアクセスするために ajax 呼び出しを使用していますが、メソッドが実行されるときに .done を入力できません。

私は、C# リファレンスとしてASP.NET MVC EPPlus Download Excel Fileを見てきました。

脚本

 function exportToExcel() {
    var batchName = $("#batchDateSelect option:selected").text();
    var bID = $("#batchDateSelect").val();
    var params = {
        BatchID: bID,
        BatchName: batchName
    };
    $.post(path + "Export/ExportToExcel", params)
    .done(function (Data, textStatus, jqXHR) {
        var fileName = "";

        ////window.location = path + "ExportFiles/"+fileName;
    });

}

コントローラ

public ActionResult ExportToExcel(int BatchID,string BatchName)
{

    FileStreamResult FSR = DataAccess.ExportUtility.CreateExcelFile(BatchID, BatchName);

    return FSR;

}

EPPlus メソッド

public static FileStreamResult CreateExcelFile(int batchid,string batchName)
    {

        string fileName = batchName + " Reason_Code_Export.xlsx";
        var serverPath = HttpContext.Current.Server.MapPath("~/ExportFiles/");
        DirectoryInfo outputDir = new DirectoryInfo(serverPath);

        FileInfo newfile = new FileInfo(outputDir.FullName + fileName);
        if (newfile.Exists)
        {
            newfile.Delete();
            newfile = new FileInfo(outputDir.FullName + fileName);
        }
        Dictionary<string,int> MAData = PolicyDataAccess.GetMatchActionData(batchid);
        MemoryStream MS = new MemoryStream();
        using (ExcelPackage package = new ExcelPackage(newfile))
        {
            ..........
            ........

            package.SaveAs(MS);
        }
        MS.Position = 0;
        var contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";

        FileStreamResult FSR = new FileStreamResult(MS, contentType);
        FSR.FileDownloadName = fileName;



        return FSR;
    }

そのファイルを取得する最も簡単な方法は何ですか?

4

3 に答える 3

1

    EPPLUS は私にいくつかの本当の頭痛の種を与えました。
そして、私はMVCにあまり詳しくありませんが、出力応答に直接書き込むという行に沿って何かをしたいと思っていると思います. その場合、以下のようなものを使用します。
メモリストリームの書き込みも機能するというコメントを残しました。それはあなたが求めていることに近いですが、現在私のコードでは使用していません。バイヤーは注意してください。

。乾杯。

        Response.Clear();
        Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";

        Response.AddHeader( "Content-Disposition", "attachment; filename=ProposalRequest-" + fileName + ".xslx" );
        Response.BinaryWrite( pck.GetAsByteArray() );
        // myMemoryStream.WriteTo(Response.OutputStream); //works too
        Response.Flush();
        Response.Close();
于 2013-10-10T18:25:15.473 に答える