【问题标题】:.NET C# exporting to excel via JS post using ExcelPackage.NET C# 使用 ExcelPackage 通过 JS post 导出到 excel
【发布时间】:2016-10-24 21:14:56
【问题描述】:

我不确定我在这里缺少什么。我有一个按钮,单击该按钮时,我正在使用 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);
        }

不确定最好的方法是什么。如果有更好的方法,请随时详细说明。

【问题讨论】:

  • 您好,我使用ActionResult 代替 FileResult 并且我发送的输出是:Response.Clear(); Response.ContentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"; Response.AddHeader("content-disposition", "attachment; filename=\"" + fileName+ "\""); Response.BinaryWrite(data); Response.Flush(); Response.End();
  • 你好。我刚刚使用了您的代码,并且能够通过使用 html form 来获取工作簿。如下:&lt;form action="/Home/ExportToExcel"&gt; &lt;input type="submit" value="ok" /&gt; &lt;/form&gt;试试看
  • @VagnerLucas 让它工作。感谢您的帮助!
  • 不错。刚刚改进了我的第一条评论作为答案。干杯!

标签: javascript c# asp.net excel excelpackage


【解决方案1】:

你的方法看起来不错。在这种情况下,您只需要使用 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();
    }

你得到的结果和你的方法一样。

【讨论】:

    猜你喜欢
    • 2017-05-29
    • 2018-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多