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

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

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

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

复制代码
  1. //导出Excel
  2. function exportExcel() {
  3. var rows = $("#saleGrid").datagrid("getRows");
  4.  
  5. for (var i = 0; i < rows.length; i++) { //进行数据处理
  6. if (isArray(rows[i].OrganizedId)) {
  7. rows[i].OrganizedId = rows[i].OrganizedId[0];
  8. }
  9. if (isArray(rows[i].CustomerId)) {
  10. rows[i].CustomerId = rows[i].CustomerId[0];
  11. }
  12. if (rows[i].AdvanceDate != null) {
  13. var unix = rows[i].AdvanceDate.replace("/Date(", "").replace(")/", "");
  14. var un = unix.substring(0, 10);
  15. var newDate = new Date();
  16. newDate.setTime(un * 1000);
  17.  
  18. rows[i].AdvanceDate = newDate.toLocaleString();
  19. }
  20. if (rows[i].OrderDate != null) {
  21. var unix = rows[i].OrderDate.replace("/Date(", "").replace(")/", "");
  22. var un = unix.substring(0, 10);
  23. var newDate = new Date();
  24. newDate.setTime(un * 1000);
  25.  
  26. rows[i].OrderDate = newDate.toLocaleString();
  27. }
  28. if (rows[i].RetainageDate != null) {
  29. var unix = rows[i].RetainageDate.replace("/Date(", "").replace(")/", "");
  30. var un = unix.substring(0, 10);
  31. var newDate = new Date();
  32. newDate.setTime(un * 1000);
  33.  
  34. rows[i].RetainageDate = newDate.toLocaleString();
  35. }
  36.  
  37. //移除不要的字段
  38. delete rows[i].SaleAtts;
  39. delete rows[i].SaleOrderId;
  40. delete rows[i].SaleOrderItems;
  41. delete rows[i].SaleStatus;
  42. delete rows[i].UserName;
  43. delete rows[i].Customer;
  44. delete rows[i].AddDate;
  45.  
  46. }
  47. var bodyData = JSON.stringify(rows); //转成json字符串
  48.  
  49. //替换中文标题
  50. var a = bodyData.replace(/SaleOrderNo/g, "订单编号").replace(/OrderType/g, "订单类型").replace(/FromWhere/g, "订单来源")
  51. .replace(/OrganizedId/g, "机构").replace(/SaleUser/g, "销售员").replace(/SaleTc/g, "销售提成").replace(/OrderDate/g, \'订单日期\')
  52. .replace(/ContractNo/g, "合同编号").replace(/Amount/g, "总额").replace(/Advance/g, "首付款").replace(/AdvanceDate/g, "首付款日期")
  53. .replace(/PayMethod/g, "支付方式").replace(/Retainage/g, "尾款").replace(/RetainageDate/g, "尾款日期").replace(/InlayPrice/g, "镶嵌款")
  54. .replace(/CustManager/g, "客户经理").replace(/EquityNo/g, "认股书编号").replace(/LogisticsTotal/g, "物流费用")
  55. .replace(/Remarks/g, "备注").replace(/CompletedStatus/g, "状态").replace(/CustomerId/g, "终端客户");
  56.  
  57. var postData = {
  58. data: a
  59. };
  60.  
  61. $.ajax({
  62. type: "POST",
  63. url: "ExportExcel",
  64. data: postData,
  65. success: function (data) {
  66. if (data == "1") {
  67. layer.msg("操作成功,文件在桌面!", {
  68. icon: 6,
  69. time: 2000,
  70. });
  71. } else if (data == "-1") {
  72. layer.msg("操作失败!", { icon: 2 });
  73. }
  74. }
  75. });
  76. }
复制代码
复制代码
  1. /// <summary>
  2. /// 导出Excel
  3. /// </summary>
  4. /// <returns></returns>
  5. public ActionResult ExportExcel()
  6. {
  7. string json = Request.Params["data"];
  8. try
  9. {
  10. DataTable dt = ExcelHelper.JsonToDataTable(json);
  11. string pathDestop = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
  12. ExcelHelper.GridToExcelByNPOI(dt, pathDestop + "\\" + "销售订单-" + DateTime.Now.ToString("yyyy-MM-dd") + "导出" + ".xls");
  13. return Content("1");
  14. }
  15. catch (Exception)
  16. {
  17. return Content("-1");
  18. }
  19. }
复制代码

效果图

导出之后

 

帮助类贴下面

复制代码
  1. /// <summary>
  2. /// 将json转换为DataTable
  3. /// </summary>
  4. /// <param name="strJson">得到的json</param>
  5. /// <returns></returns>
  6. public static DataTable JsonToDataTable(string strJson)
  7. {
  8. //转换json格式
  9. strJson = strJson.Replace(",\"", "*\"").Replace("\":", "\"#").ToString();
  10. //取出表名
  11. var rg = new Regex(@"(?<={)[^:]+(?=:\[)", RegexOptions.IgnoreCase);
  12. string strName = rg.Match(strJson).Value;
  13. DataTable tb = null;
  14. //去除表名
  15. strJson = strJson.Substring(strJson.IndexOf("[") + 1);
  16. strJson = strJson.Substring(0, strJson.IndexOf("]"));
  17.  
  18. //获取数据
  19. rg = new Regex(@"(?<={)[^}]+(?=})");
  20. MatchCollection mc = rg.Matches(strJson);
  21. for (int i = 0; i < mc.Count; i++)
  22. {
  23. string strRow = mc[i].Value;
  24. string[] strRows = strRow.Split(\'*\');
  25. //创建表
  26. if (tb == null)
  27. {
  28. tb = new DataTable();
  29. tb.TableName = strName;
  30. foreach (string str in strRows)
  31. {
  32. var dc = new DataColumn();
  33. string[] strCell = str.Split(\'#\');
  34.  
  35. if (strCell[0].Substring(0, 1) == "\"")
  36. {
  37. int a = strCell[0].Length;
  38. dc.ColumnName = strCell[0].Substring(1, a - 2);
  39. }
  40. else
  41. {
  42. dc.ColumnName = strCell[0];
  43. }
  44. tb.Columns.Add(dc);
  45. }
  46. tb.AcceptChanges();
  47. }
  48.  
  49. //增加内容
  50. DataRow dr = tb.NewRow();
  51. for (int r = 0; r < strRows.Length; r++)
  52. {
  53. try
  54. {
  55. string a = strRows[r].Split(\'#\')[1].Trim();
  56. if (a.Equals("null"))
  57. {
  58. dr[r] = "";
  59. }
  60. else
  61. {
  62. dr[r] = strRows[r].Split(\'#\')[1].Trim().Replace(",", ",").Replace(":", ":").Replace("\"", "");
  63. }
  64. }
  65. catch (Exception e)
  66. {
  67. throw e;
  68. }
  69. }
  70. tb.Rows.Add(dr);
  71. tb.AcceptChanges();
  72. }
  73.  
  74. try
  75. {
  76. if (tb != null)
  77. {
  78. return tb;
  79. }
  80. else
  81. {
  82. throw new Exception("解析错误");
  83. }
  84. }
  85. catch (Exception e)
  86. {
  87. throw e;
  88. }
  89. }
复制代码

 

 

 

——————————————————————————————————— 

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

版权声明:本文为dreamOfChen原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/dreamOfChen/p/4886055.html