2016-07-27 6 views
0

Ich habe eine dynamisch generierte HTML-Tabelle. Ich habe eine ActionResult-Methode "GetOrders", die ein OrderViewModel-Listenobjekt basierend auf einem Datumsbereich zurückgibt, der vom Benutzer bereitgestellt wird. Nach dem Rendern der Tabelle möchte ich eine zweite Aktionsmethode haben, die diese Daten in eine Excel-Datei exportiert.Exportieren einer HTML-Tabelle nach Excel

Meine Frage ist: Muss ich die HTML-Tabelle analysieren, die in ein Dataset/Gridview gerendert wird, oder gibt es eine Möglichkeit, die Daten zu speichern, die in der ursprünglichen "GetOrders" -Aktionsmethode abgefragt werden? So könnte ich es für den Export in eine zweite Funktion überführen.

Ich habe einen Teil des Codes, um das Verständnis zu unterstützen, was ich versuche zu erreichen ..

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

Gibt es eine Möglichkeit, diese Daten zu „greifen“ und es in eine zweite exportToExcel Funktion übergeben ? Oder muss ich herausfinden, wie man es analysiert?

Antwort

0

Dies ist eine der verschiedenen Methoden Ihr Make ActionMethod eine Rückkehr Json wie:

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

.Make einen Ajax-Aufruf zu GetOrders wie:

$.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); 

      } 
     }); 

Sie einen div mit Namen erstellen "dvdata" und Tabelle wie:

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

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

Oder nehmen wir Sie HTML-Tabelle aus Ihrer Sicht haben und Sie möchten in Excel die Tabelle zum Download dann this sehen, this Geige

Oder Sie können this Plugin

verwenden
Verwandte Themen