easyui datagrid導出excel

【第十四篇】easyui datagrid導出excel

 
<a class="btn btn-app" onclick="exportExcel()"><i class="fa fa-edit"></i>導出Excel</a>

貼下面的代碼以前,我想說一下html

個人數據是主外鍵關係,有多張表關聯,因此在作數據的時候,發現不少問題,讀取的時候,它會自動讀取全部的數據。ajax

固然這不能知足我導出以後的要求,我只須要導出我要的字段便可,因此我進行了數據處理。json

複製代碼
 //導出Excel
    function exportExcel() {
        var rows = $("#saleGrid").datagrid("getRows");

        for (var i = 0; i < rows.length; i++) {    //進行數據處理
            if (isArray(rows[i].OrganizedId)) {
                rows[i].OrganizedId = rows[i].OrganizedId[0];
            }
            if (isArray(rows[i].CustomerId)) {
                rows[i].CustomerId = rows[i].CustomerId[0];
            }
            if (rows[i].AdvanceDate != null) {
                var unix = rows[i].AdvanceDate.replace("/Date(", "").replace(")/", "");
                var un = unix.substring(0, 10);
                var newDate = new Date();
                newDate.setTime(un * 1000);

                rows[i].AdvanceDate = newDate.toLocaleString();
            }
            if (rows[i].OrderDate != null) {
                var unix = rows[i].OrderDate.replace("/Date(", "").replace(")/", "");
                var un = unix.substring(0, 10);
                var newDate = new Date();
                newDate.setTime(un * 1000);

                rows[i].OrderDate = newDate.toLocaleString();
            }
            if (rows[i].RetainageDate != null) {
                var unix = rows[i].RetainageDate.replace("/Date(", "").replace(")/", "");
                var un = unix.substring(0, 10);
                var newDate = new Date();
                newDate.setTime(un * 1000);

                rows[i].RetainageDate = newDate.toLocaleString();
            }

            //移除不要的字段
            delete rows[i].SaleAtts;
            delete rows[i].SaleOrderId;
            delete rows[i].SaleOrderItems;
            delete rows[i].SaleStatus;
            delete rows[i].UserName;
            delete rows[i].Customer;
            delete rows[i].AddDate;

        }
        var bodyData = JSON.stringify(rows);  //轉成json字符串

        //替換中文標題
        var a = bodyData.replace(/SaleOrderNo/g, "訂單編號").replace(/OrderType/g, "訂單類型").replace(/FromWhere/g, "訂單來源")
       .replace(/OrganizedId/g, "機構").replace(/SaleUser/g, "銷售員").replace(/SaleTc/g, "銷售提成").replace(/OrderDate/g, '訂單日期')
       .replace(/ContractNo/g, "合同編號").replace(/Amount/g, "總額").replace(/Advance/g, "首付款").replace(/AdvanceDate/g, "首付款日期")
       .replace(/PayMethod/g, "支付方式").replace(/Retainage/g, "尾款").replace(/RetainageDate/g, "尾款日期").replace(/InlayPrice/g, "鑲嵌款")
       .replace(/CustManager/g, "客戶經理").replace(/EquityNo/g, "認股書編號").replace(/LogisticsTotal/g, "物流費用")
       .replace(/Remarks/g, "備註").replace(/CompletedStatus/g, "狀態").replace(/CustomerId/g, "終端客戶");

        var postData = {
            data: a
        };

        $.ajax({
            type: "POST",
            url: "ExportExcel",
            data: postData,
            success: function (data) {
                if (data == "1") {
                    layer.msg("操做成功,文件在桌面!", {
                        icon: 6,
                        time: 2000,
                    });
                } else if (data == "-1") {
                    layer.msg("操做失敗!", { icon: 2 });
                }
            }
        });
    }
複製代碼
複製代碼
        /// <summary>
        /// 導出Excel
        /// </summary>
        /// <returns></returns>
        public ActionResult ExportExcel()
        {
            string json = Request.Params["data"];
            try
            {
                DataTable dt = ExcelHelper.JsonToDataTable(json);
                string pathDestop = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
                ExcelHelper.GridToExcelByNPOI(dt, pathDestop + "\\" + "銷售訂單-" + DateTime.Now.ToString("yyyy-MM-dd") + "導出" + ".xls");
                return Content("1");
            }
            catch (Exception)
            {
                return Content("-1");
            }
        }
複製代碼

效果圖app

導出以後post

 

幫助類貼下面ui

複製代碼
 /// <summary>
    /// 將json轉換爲DataTable
    /// </summary>
    /// <param name="strJson">獲得的json</param>
    /// <returns></returns>
    public static DataTable JsonToDataTable(string strJson)
    {
        //轉換json格式
        strJson = strJson.Replace(",\"", "*\"").Replace("\":", "\"#").ToString();
        //取出表名   
        var rg = new Regex(@"(?<={)[^:]+(?=:\[)", RegexOptions.IgnoreCase);
        string strName = rg.Match(strJson).Value;
        DataTable tb = null;
        //去除表名   
        strJson = strJson.Substring(strJson.IndexOf("[") + 1);
        strJson = strJson.Substring(0, strJson.IndexOf("]"));

        //獲取數據   
        rg = new Regex(@"(?<={)[^}]+(?=})");
        MatchCollection mc = rg.Matches(strJson);
        for (int i = 0; i < mc.Count; i++)
        {
            string strRow = mc[i].Value;
            string[] strRows = strRow.Split('*');
               
            //建立表   
            if (tb == null)
            {
                tb = new DataTable();
                tb.TableName = strName;
                foreach (string str in strRows)
                {
                    var dc = new DataColumn();
                    string[] strCell = str.Split('#');

                    if (strCell[0].Substring(0, 1) == "\"")
                    {
                        int a = strCell[0].Length;
                        dc.ColumnName = strCell[0].Substring(1, a - 2);
                    }
                    else
                    {
                        dc.ColumnName = strCell[0];
                    }
                    tb.Columns.Add(dc);
                }
                tb.AcceptChanges();
            }

            //增長內容   
            DataRow dr = tb.NewRow();
            for (int r = 0; r < strRows.Length; r++)
            {
                try
                {
                    string a = strRows[r].Split('#')[1].Trim();
                    if (a.Equals("null"))
                    {
                        dr[r] = "";
                    }
                    else
                    {
                        dr[r] = strRows[r].Split('#')[1].Trim().Replace(",", ",").Replace(":", ":").Replace("\"", "");
                    }
                }
                catch (Exception e)
                {
                    
                    throw e;
                }
            }
            tb.Rows.Add(dr);
            tb.AcceptChanges();
        }

        try
        {
            if (tb != null)
            {
                return tb;
            }
            else
            {
                throw new Exception("解析錯誤");
            }
        }
        catch (Exception e)
        {
            
            throw e;
        }
    }
複製代碼

 

 

 

--------------------------------------------------------------------------------------------------------- url

轉載請記得說明做者和出處哦-.-
做者:KingDuDu
原文出處:http://www.cnblogs.com/kingdudu/p/4863980.htmlspa

相關文章
相關標籤/搜索