【问题标题】:How to export data in a Excel Sheet on a button click using ASP.NET MVC如何使用 ASP.NET MVC 在单击按钮时导出 Excel 工作表中的数据
【发布时间】:2023-04-11 06:56:01
【问题描述】:

我正在尝试在 ASP.NET MVC 中单击按钮导出数据。我写了一个JSONResult ExportDataInExcel() 类,在这里我写了代码来导出我从MyService 获得的数据。

我能够获取所有数据,但单击按钮时这些数据没有导出到 Excel 表。我希望当我点击我的按钮时,它应该将数据导出到 Excel 表中。但目前我的数据显示在 View 上,而不是导出到 Excel Sheet。任何人都可以帮助我了解我缺少什么吗?

控制器:

public JsonResult ExportDataInExcel(int A, int B, string C)
{
    Response.Clear();
    Response.Buffer = true;
    Response.ContentType = "application/vnd.ms-excel";
    Response.AddHeader("Content-disposition", "attachment; filename=Test.xls");
    Response.Charset = "";

    MyService.ServiceInfoClient objMyService = new MyService.ServiceInfoClient();

    System.IO.StringWriter stringWriter = new System.IO.StringWriter();
    HtmlTextWriter htmlTextWriter = new HtmlTextWriter(stringWriter);

    GridView ExcelGrid = new GridView();
    ExcelGrid.DataSource = from data in objMyService.ExportTestData(lId,wId,cid)
        select new
        {
            A=data.a,
            B=data.b,
            C=data.c,
            D=data.d,
            E=data.e,
            F=data.f,
            G=data.g
        };
    ExcelGrid.DataBind();
    ExcelGrid.HeaderStyle.Font.Bold = true;
    ExcelGrid.HeaderStyle.ForeColor = System.Drawing.Color.White; ;
    ExcelGrid.HeaderStyle.BackColor = System.Drawing.Color.Green;
    ExcelGrid.RenderControl(htmlTextWriter);

    Response.Output.Write(stringWriter.ToString());
    Response.Flush();
    Response.End();

    return Json(ExcelGrid);
}

查看

<script type="text/javascript">
    function ExportTestDet(){
        if ($("#ddl1").val() == '0') {
            alert('Please select');
            return false;
        }

        if ($("#ddl2").val() == '0') {
            alert('Please select');
            return false;
        }

        $.ajax({
            type: 'POST',
            url: '@Url.Action("ExportDataInExcel")',
            datatype: 'JSON',
            data: { LId: $("#ddl1").val(), WID: $("#ddl2").val() },
            success: function (data) {
                $("#DynamicContent").html(data);
                $("#tbl").show();
                alert("Exported");
            },
            error: function (ex) {
                alert('Failed to export data: ' + ex.responseText);
            }
        });
    }
</script>

<div>
    <input type="submit" value="Export Excel" onclick="return ExportTestDet()" />
</div>

【问题讨论】:

  • 好吧,您并没有创建实际的 Excel 文件,所以这是个问题。与其将 HTML 转换为文件并使用 Excel MIME 类型和扩展名提供服务,不如创建一个实际的 Excel 文件?使用 EPPlus、NPOI、ClosedXML、Office XML SDK、Aspose 等...

标签: c# asp.net asp.net-mvc excel office-interop


【解决方案1】:

我不确定您为什么要返回 JSON 字符串,但需要 Excel。

返回一个 ActionResult,而不是 JsonResult,如下所示:

public ActionResult ExportDataInExcel(int A, int B, string C)
{
    string contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
    string fileName = "WhateverFile.xlsx";

    // CODE TO GENERATE EXCEL FILE (OR CSV) HERE (I recommend EPPlus)

    // output the file
    var stream = new MemoryStream();
    EPPlusExcelFileYouGenerated.SaveAs(stream); // however you get your generated file to the MemoryStream is fine.

    stream.Position = 0;
    return File(stream, contentType, fileName);
}

【讨论】:

  • 我正在使用 JSONResult,因为我想通过 Ajax 调用传递 JSONResult 类中的参数。我有两个下拉菜单,这两个的值在我的 JSONResult 中传递。
  • 是否可以从 Ajax 导出数据?我现在正在尝试这样做,而不是依赖 JSONResult。如果你能帮我解决这个问题?
  • 不...您不能从 Ajax 显示它。您需要将其作为 excel 文件返回(如我在此处所示),以便用户可以打开它。
【解决方案2】:

使用 Jquery jquery.table2excel.js 这将帮助您进行移植 从 html 表格到 excel 的日期,表格的头部和主体格式必须正确 tags 和 table id 也必须。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-22
    • 1970-01-01
    • 1970-01-01
    • 2017-06-26
    • 1970-01-01
    • 2020-10-30
    相关资源
    最近更新 更多