如何使用EPPlus和MVC从服务器下载.xslx文件

Jos*_*phK 3 c# asp.net-mvc excel download epplus

我有一个通过使用EPPlus在服务器上生成的Excel文件,该文件已正确制作,并使用window.location在本地计算机上工作正常,但是在将其部署到服务器时却什么也不做。我正在尝试通过MVC控制器返回FileStreamResult,但我认为它不起作用。我正在使用ajax调用来访问控制器方法,但在运行该方法时无法输入.done。

我一直在寻找ASP.NET MVC EPPlus下载Excel文件作为C#参考。

脚本

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

}
Run Code Online (Sandbox Code Playgroud)

控制者

public ActionResult ExportToExcel(int BatchID,string BatchName)
{

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

    return FSR;

}
Run Code Online (Sandbox Code Playgroud)

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;
    }
Run Code Online (Sandbox Code Playgroud)

获取该文件的最简单方法是什么?

Sha*_*rza 5

我对这个问题迟到了,但可能会对其他人有所帮助。

设置excel工作表后,无需保存或将其添加到MemoryStream中,只需将字节数组制作为packge.GetAsByteArray()即可,然后从操作中将作为File而不是FileStreamResult返回

var FileBytesArray = packge.GetAsByteArray();
return File(FileBytesArray, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", filename + ".xlsx");
Run Code Online (Sandbox Code Playgroud)