easyui datagrid导出excel

【第十四篇】easyui datagrid导出excel

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

贴下面的代码之前,我想说一下

我的数据是主外键关系,有多张表关联,所以在做数据的时候,发现很多问题,读取的时候,它会自动读取所有的数据。

当然这不能满足我导出之后的要求,我只需要导出我要的字段即可,所以我进行了数据处理。

 //导出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");
            }
        }

效果图

导出之后

帮助类贴下面

 /// <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;
        }
    }

---------------------------------------------------------------------------------------------------------

转载请记得说明作者和出处哦-.-
作者:KingDuDu
原文出处:http://www.cnblogs.com/kingdudu/p/4863980.html

时间: 2024-10-05 18:25:21

easyui datagrid导出excel的相关文章

Jquery easyui datagrid 导出Excel

datagrid的扩展方法,用于将当前的数据生成excel需要的内容. 1 <script> 2 /** 3 Jquery easyui datagrid js导出excel 4 修改自extgrid导出excel 5 * allows for downloading of grid data (store) directly into excel 6 * Method: extracts data of gridPanel store, uses columnModel to constru

easyui datagrid 导出excel

本片文章是介绍如何用ajax的方式将easyui中的datagrid数据导出到excel中. 声明:该代码是在参考前人的代码写出来的,并非我原创,我只是新增了些功能. 新增部分: 1. 对于列是枚举列的可以设置枚举值,导出时会自动替换列中的枚举值,详细见用例代码. 2. 新增导出时不导出首列或末列指定个数的列,详细接用例代码. 下面是插件源码: /** Jquery easyui datagrid js导出excel 修改自extgrid导出excel * allows for download

【第十四篇】easyui datagrid导出excel

<a class="btn btn-app" onclick="exportExcel()"><i class="fa fa-edit"></i>导出Excel</a> 贴下面的代码之前,我想说一下 我的数据是主外键关系,有多张表关联,所以在做数据的时候,发现很多问题,读取的时候,它会自动读取所有的数据. 当然这不能满足我导出之后的要求,我只需要导出我要的字段即可,所以我进行了数据处理. //导出E

.net导出Excel

protected void btnPrint_Click(object sender, EventArgs e) { DataTable dt = DbHelperSQL.GetTable("select b.ProNumber as 产品编号,b.Name as 产品名称,b.kucun as 剩余库存,b.Price as 产品价格,a.buynum as 购买数量,(b.price*a.buynum) as 合计金额 from shopcar as a,Product as b wher

wpf 窗口程序下将datagrid导出为excel

今天用了几个小时也没有找到将datagrid导出为excel的方法,搜索msdn发现,老外也木有解决这个问题,因此把代码贴出来,和大家分享一下,提高工作效率.简要说一哈,本程序使用反射,因此代码量看起来,很少,但是执行效率,还在没有进行优化处理. #region wpf客户端 导出DataGrid数据到Excel /// <summary> /// CSV格式化 /// </summary> /// <param name="data">数据<

用jxl导出Excel

断断续续,终于把这个简单的功能实现了. 本身花的有效时间也不多,但是陆续出现好多蛋疼的问题,归根结底是自己程序功底不深厚,尤其对Java流理解不透彻. 还好今天时间充足,磨得我背疼不已的时候,终于把它整完了. 这里首先介绍下背景:SSM框架(前端easyui).POI因为乱码问题被pass掉.五一假期又没有花时间,不得不赶紧换个API把他整出来. 功能大致是这样的: 点击按钮导出所有的(不经分页的)数据到Excel中. busiAccept.jsp 1 <%@ page language="

spring mvc 导出 excel

1 // js 触发导出 excel 方法 导出当前页的数据 含有条件查询的结果 2 // js 框架使用的 是 easyui 3 function doExport(){ 4 5 6 var optins = $("#grid").datagrid("getPager").data("pagination").options; 7 var page = optins.pageNumber; 8 var rows = optins.pageSiz

MVC导出Excel到客户端

MVC导出数据到Excel详解 今天为大家分享一个利用NPIO导出数据到Excel 客户端的例子!(刚毕业的小白,第一次写博,如有错误 还望各位大咖指正) 1.NPOI官方网站:(http://npoi.codeplex.com/) 需要引用的dll文件如下: 2.用到的ExcelHelper类: 1 using Common.Logging; 2 using NPOI.HPSF; 3 using NPOI.HSSF.UserModel; 4 using NPOI.HSSF.Util; 5 us

easyui datagrid 单元格编辑 即见即所得,MVC菜单维护,扫描增加

效果如图: 参见 EasyUI 官方 Demo 及文档 @{ ViewBag.Title = "Index"; Layout = "~/Views/Shared/_Layout.cshtml"; } <script src="~/jquery-easyui-1.4.2/locale/easyui-lang-zh_CN.js"></script> <table id="datagrid" class