将HTML表导出到Excel

时间:2016-07-27 23:09:58

标签: asp.net-mvc excel entity-framework linq export-to-excel

我有一个动态生成的HTML表格。我有一个ActionResult方法" GetOrders"返回基于用户提供的日期范围的OrderViewModel列表对象。渲染表后,我希望有第二个Action方法将该数据导出到excel文件。

我的问题是:我是否必须解析渲染到数据集/网格视图中的HTML表格,或者是否有办法保存原始数据中正在查询的数据" GetOrders"行动方法?这样我就可以将它传递给导出的第二个函数。

我提供了一些代码来帮助理解我想要完成的事情。

 [HttpPost]
    public ActionResult GetOrders(DateTime startDate, DateTime endDate)
    {

        var model = db.SalesOrderDetails
            .Where(e => e.SalesOrderHeader.OrderDate > startDate)
            .Where(e => e.SalesOrderHeader.OrderDate < endDate)
            .Join(db.Products, order => order.ProductID,
                product => product.ProductID,
                (order, product) => new OrderViewModel()
                {
                    Quantity = order.OrderQty,
                    UnitNet = order.UnitPrice,
                    DueDate = order.SalesOrderHeader.DueDate,
                    CustomerPO = order.SalesOrderHeader.PurchaseOrderNumber,
                    InvoiceNumber = order.SalesOrderHeader.SalesOrderNumber,
                    InvoiceTotal = order.SalesOrderHeader.TotalDue,
                    OrderDate = order.SalesOrderHeader.OrderDate,
                    AccountNumber = order.SalesOrderHeader.AccountNumber,
                    Store = order.SalesOrderHeader.Customer.Store.Name,
                    Customer = order.SalesOrderHeader.Customer.Person.FirstName + " " +
                               order.SalesOrderHeader.Customer.Person.LastName,
                    ProductNumber = product.ProductNumber
                }).Take(15);

        return View(model.ToList());
    }

有没有办法去抓住&#34;这个数据并将其传递给第二个exportToExcel函数?或者我需要弄清楚如何解析它?

1 个答案:

答案 0 :(得分:0)

这是各种方法之一 让ActionMethod返回Json 像:

[HttpPost]
public JsonResult GetOrders(DateTime startDate, DateTime endDate)
{
 //your code
 return Json(model.toList(),JsonRequestBehavior.AllowGet);
}

。对GetOrders进行Ajax调用,如:

   $.ajax({
            type: "POST",
            url: '@Url.Action("GetOrders")',
            dataType: "json",
            data: { startDate: startDate, endDate: endDate, catid: catid, prdId: prdId, brandId: brandId },
            async: true,
            success: function (data) {
                   var htmlhead =    "<thead>       <tr><th style=\"width:6%; text-align:center;\"> Quantity</th> <th style=\"text-align:center;margin-left:4%;\">UnitNet</th><th style=\"text-align:center;margin-left:4%;\">DueDate</th></tr> </thead>";
                for (var i = 0; i < data.length; i++) {
                    htmlval = htmlval + ("<tr><td>" + data[i].Quantity + "</td><td style=\"text-align:center;\"> " + data[i].UnitNet + "</td><td style=\"text-align:center;\"> " + data[i].DueDate + "</td></tr>");
                }
                html = htmlhead + htmlval;
                $("#table").html(html);
                window.open('data:application/vnd.ms-excel,' + encodeURIComponent($('div[id$=dvData]').html()));
            },

            error: function (jqXHR, exception) {
                console.log(jqXHR.responseText);

            }
        });

创建一个名为&#34; dvdata&#34;的div。和表格一样:

<div id="dvData" style="display:none;">

<table id="table"></table>

或者假设您在视图中有Html表,并且要在Excel中下载该表,然后查看thisthis小提琴

或者您可以使用this插件