簡體   English   中英

.NET C#使用ExcelPackage通過JS post導出到excel

[英].NET C# exporting to excel via JS post using ExcelPackage

我不確定我在這里缺少什么。 我有一個按鈕,當單擊該按鈕時,我正在使用javascript調用控制器。 該控制器應創建一個excel文件,並將其返回給用戶,使他們能夠下載/保存文件。 我嘗試了幾種不同的方法,但無法使其正常工作。 這是我的JavaScript面:

function exportList() {
    var val = $("#team-dropdown").val();
    const date = new Date().toISOString();
    const param = {
        "Date": date,
        "GroupID": 1
    }

    $.ajax({
        url: "@Url.Action("ExportToExcel", "Home")",
        type: "POST",
        data: param
    });
}

這是我的服務器端:

public FileResult ExportToExcel(DateTime date, int groupID)
        {
            Load l = new Load();
            List<Load> loadList = l.GetLoadsForGroup(date, groupID);

            var fileDownloadName = "fileName.xlsx";
            var contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";

            ExcelPackage pck = new ExcelPackage();
            var ws = pck.Workbook.Worksheets.Add("New workbook");
            ws.View.ShowGridLines = true;
            ws.DefaultColWidth = 25;
            ws.Cells[1, 1].Value = "Order #";

            var currRow = 2;
            foreach (var load in loadList)
            {
                ws.Cells[2, 2].Value = load.LoadNumber;                    
            }



            var fs = new MemoryStream();
            pck.SaveAs(fs);
            fs.Position = 0;
            var fsr = new FileStreamResult(fs, contentType);
            fsr.FileDownloadName = fileDownloadName;
            return (fsr);
        }

不確定執行此操作的最佳方法是什么。 如果有更好的方法,請隨時詳細說明。

您的方法看起來不錯。 在這種情況下,您只需要使用html form發布即可,而不是使用js函數。 另外,如果您想使用ActionResult ,可以編寫:

public ActionResult ExportToExcel()
    {
        Load l = new Load();
        List<Load> loadList = l.GetLoadsForGroup(date, groupID);

        var fileDownloadName = "fileName.xlsx";
        var contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";

        ExcelPackage pck = new ExcelPackage();
        var ws = pck.Workbook.Worksheets.Add("New workbook");
        ws.View.ShowGridLines = true;
        ws.DefaultColWidth = 25;
        ws.Cells[1, 1].Value = "Order #";

        var currRow = 2;
        foreach (var load in loadList)
        {
            ws.Cells[2, 2].Value = load.LoadNumber;
        }

        Response.Clear();
        Response.ContentType = contentType;
        Response.AddHeader("content-disposition", "attachment; filename=\"" + fileDownloadName + "\"");
        Response.BinaryWrite(pck.GetAsByteArray());
        Response.Flush();
        Response.End();
        return View();
    }

您將獲得與您的方法相同的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM