起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10048|回复: 15

[分享] WeX5导出Excel

  [复制链接]

65

主题

315

帖子

851

积分

高级会员

Rank: 4

积分
851
发表于 2017-1-17 10:18:45 | 显示全部楼层 |阅读模式
本帖最后由 我是小菜鸡 于 2017-1-17 10:25 编辑

因为项目需要需要导出报表,在论坛上也没找到相关方法,网上找的都是使用js将table导出Excel的方法,对比了一下平台上的listtable还和js的table结构上有点区别,对于我这种小白来说还是有点困难的。后来忽然想到table绑定的一般都是baasData组件,而baasData可以转成JSON,能不能使用js将JSON导出Excel呢?然后就在网上找到了方法:纯前台js json导出到excel,不与后台交互
看了一下还是将JSON转成了table然后导出到Excel的,代码如下,只要稍微变化一下就能用了
  1. <html>  
  2. <head>  
  3.     <meta http-equiv="content-type" content="text/html; charset=utf-8">  
  4.     <script type="text/javascript" src="jquery.min.js"></script>  
  5.     <script type="text/javascript">  
  6.         $(document).ready(function(){  
  7.             $('#wwo').click(function(){  
  8.                 var data = {"title":[{"value":"集团", "type":"ROW_HEADER_HEADER", "datatype":"string"}, {"value":"日期", "type":"ROW_HEADER_HEADER", "datatype":"string"}],"data":[[{"value":"好好", "type":"ROW_HEADER"}, {"value":"2015-08-24", "type":"ROW_HEADER"}]]};  
  9.                 if(data == '')  
  10.                     return;  
  11.                 JSONToExcelConvertor(data.data, "Report", data.title);  
  12.             });  
  13.         });  
  14.   
  15.         function JSONToExcelConvertor(JSONData, FileName, ShowLabel) {  
  16.             //先转化json  
  17.             var arrData = typeof JSONData != 'object' ? JSON.parse(JSONData) : JSONData;  
  18.               
  19.             var excel = '<table>';      
  20.               
  21.             //设置表头  
  22.             var row = "<tr>";  
  23.             for (var i = 0, l = ShowLabel.length; i < l; i++) {  
  24.                 row += "<td>" + ShowLabel[i].value + '</td>';  
  25.             }  
  26.               
  27.               
  28.             //换行  
  29.             excel += row + "</tr>";  
  30.               
  31.             //设置数据  
  32.             for (var i = 0; i < arrData.length; i++) {  
  33.                 var row = "<tr>";  
  34.                   
  35.                 for (var index in arrData[i]) {  //这里可以对index进行约束取自己想要的数据
  36.                     var value = arrData[i][index].value === "." ? "" : arrData[i][index].value;  
  37.                     row += '<td>' + value + '</td>';  
  38.                 }  
  39.                   
  40.                 excel += row + "</tr>";  
  41.             }  
  42.   
  43.             excel += "</table>";  
  44.   
  45.             var excelFile = "<html xmlns:o='urn:schemas-microsoft-com:office:office' xmlns:x='urn:schemas-microsoft-com:office:excel' xmlns='http://www.w3.org/TR/REC-html40'>";  
  46.             excelFile += '<meta http-equiv="content-type" content="application/vnd.ms-excel; charset=UTF-8">';  
  47.             excelFile += '<meta http-equiv="content-type" content="application/vnd.ms-excel';  
  48.             excelFile += '; charset=UTF-8">';  
  49.             excelFile += "<head>";  
  50.             excelFile += "<!--[if gte mso 9]>";  
  51.             excelFile += "<xml>";  
  52.             excelFile += "<x:ExcelWorkbook>";  
  53.             excelFile += "<x:ExcelWorksheets>";  
  54.             excelFile += "<x:ExcelWorksheet>";  
  55.             excelFile += "<x:Name>";  
  56.             excelFile += "{worksheet}";  
  57.             excelFile += "</x:Name>";  
  58.             excelFile += "<x:WorksheetOptions>";  
  59.             excelFile += "<x:DisplayGridlines/>";  
  60.             excelFile += "</x:WorksheetOptions>";  
  61.             excelFile += "</x:ExcelWorksheet>";  
  62.             excelFile += "</x:ExcelWorksheets>";  
  63.             excelFile += "</x:ExcelWorkbook>";  
  64.             excelFile += "</xml>";  
  65.             excelFile += "<![endif]-->";  
  66.             excelFile += "</head>";  
  67.             excelFile += "<body>";  
  68.             excelFile += excel;  
  69.             excelFile += "</body>";  
  70.             excelFile += "</html>";  
  71.   
  72.               
  73.             var uri = 'data:application/vnd.ms-excel;charset=utf-8,' + encodeURIComponent(excelFile);  
  74.               
  75.             var link = document.createElement("a");      
  76.             link.href = uri;  
  77.               
  78.             link.style = "visibility:hidden";  
  79.             link.download = FileName + ".xls";  
  80.               
  81.             document.body.appendChild(link);  
  82.             link.click();  
  83.             document.body.removeChild(link);  
  84.         }  
  85.     </script>  
  86. </head>  
  87. <body>  
  88.     <input type="button" id="wwo" value="导出" />  
  89. </body>  
  90. </html>  
复制代码

评分

参与人数 1威望 +30 收起 理由
liangyongfei + 30 很给力!

查看全部评分

35

主题

142

帖子

362

积分

中级会员

Rank: 3Rank: 3

积分
362
QQ
发表于 2017-2-16 10:34:09 | 显示全部楼层
试了下,导不出excel文件,能不能在详细说明操作步骤
回复 支持 反对

使用道具 举报

35

主题

142

帖子

362

积分

中级会员

Rank: 3Rank: 3

积分
362
QQ
发表于 2017-2-16 21:23:32 | 显示全部楼层
好了
回复

使用道具 举报

718

主题

2841

帖子

5657

积分

论坛元老

Rank: 8Rank: 8

积分
5657
QQ
发表于 2017-2-17 08:03:19 | 显示全部楼层
WEX5初学者,欢迎初学者交流
QQ:597558229
tel:15857336322
回复

使用道具 举报

29

主题

123

帖子

322

积分

中级会员

Rank: 3Rank: 3

积分
322
QQ
发表于 2017-2-17 09:07:05 | 显示全部楼层
用了很好,请问楼主有导入excel的代码吗
回复 支持 反对

使用道具 举报

65

主题

315

帖子

851

积分

高级会员

Rank: 4

积分
851
 楼主| 发表于 2017-3-3 09:11:18 | 显示全部楼层
tuopu1222 发表于 2017-2-17 09:07
用了很好,请问楼主有导入excel的代码吗

不好意思,没研究过这个功能
回复 支持 反对

使用道具 举报

65

主题

315

帖子

851

积分

高级会员

Rank: 4

积分
851
 楼主| 发表于 2017-3-3 09:16:50 | 显示全部楼层
在实际使用过程中发现这个方法存在一个问题:当数据量很大的时候导出速度很慢,可以通过将数据分段导出的方式提高效率,不过这样也只是暂时的解决方法。最好还是向服务器发送服务请求,在后台生成报表,然后再将报表文件传到前台。
回复 支持 反对

使用道具 举报

44

主题

116

帖子

364

积分

中级会员

Rank: 3Rank: 3

积分
364
QQ
发表于 2017-6-14 14:28:10 | 显示全部楼层
楼主,能给详细讲解下怎么用吗,我基础更差……
回复 支持 反对

使用道具 举报

65

主题

315

帖子

851

积分

高级会员

Rank: 4

积分
851
 楼主| 发表于 2017-6-20 15:07:59 | 显示全部楼层
只要将给的代码中的js部分放到js页面稍微改一下就能用了~
  1. // 将json格式数据转成Excel
  2.         Model.prototype.JSONToExcelConvertor = function(JSONData, FileName, ShowLabel) {
  3.                 var tradeData = this.comp("TradeData");
  4.                 // 先转化json
  5.                 var arrData = typeof JSONData != 'object' ? JSON.parse(JSONData) : JSONData;

  6.                 var excel = "<table width='100%' border='1' cellspacing='0' cellpadding='0' >";

  7.                 // 设置表头
  8.                 var row = "<tr style='text-align : center;' bgcolor = '#ADADAD'>";
  9.                 for (var i = 0, l = ShowLabel.length; i < l; i++) {
  10.                         row += "<td>" + ShowLabel[i] + '</td>';
  11.                 }

  12.                 // 换行
  13.                 excel += row + "</tr>";

  14.                 // 设置数据
  15.                 for (i = 0; i < arrData.length; i++) {
  16.                         row = "<tr bgcolor = '#FCFCFC'>";
  17.                         var value = arrData[i]['ShopNo'].value === "." ? "" : arrData[i]['ShopNo'].value;
  18.                         row += '<td style="mso-number-format:\'\\@\';">' + $.trim(value) + '</td>';
  19.                         value = arrData[i]['ShopName'].value === "." ? "" : arrData[i]['ShopName'].value;
  20.                         row += '<td style="mso-number-format:\'\\@\';">' + $.trim(value) + '</td>';
  21.                         value = arrData[i]['Trade'].value === "." ? "" : arrData[i]['Trade'].value;
  22.                         // 业态名称
  23.                         var temp = "";
  24.                         if ($.trim(value) !== "") {
  25.                                 var rows = tradeData.find([ "Code" ], [ value ]);
  26.                                 if (rows.length > 0)
  27.                                         temp = rows[0].val("CodeNameCN");
  28.                         }
  29.                         row += '<td style="mso-number-format:\'\\@\';">' + temp + '</td>';
  30.                         value = arrData[i]['ShopType'].value === "." ? "" : arrData[i]['ShopType'].value;
  31.                         row += '<td style="mso-number-format:\'\\@\';">' + $.trim(value) + '</td>';
  32.                         value = arrData[i]['AddUserID'].value === "." ? "" : arrData[i]['AddUserID'].value;
  33.                         row += '<td style="mso-number-format:\'\\@\';">' + $.trim(value) + '</td>';
  34.                         value = arrData[i]['AddDateTime'].value === "." ? "" : arrData[i]['AddDateTime'].value;
  35.                         if ($.trim(value) !== "") {
  36.                                 value = value.replace("T", " ");
  37.                                 value = value.replace("Z", "");
  38.                         }
  39.                         row += '<td style="mso-number-format:\'\\@\';">' + $.trim(value) + '</td>';
  40.                         value = arrData[i]['UpdUserID'].value === "." ? "" : arrData[i]['UpdUserID'].value;
  41.                         row += '<td style="mso-number-format:\'\\@\';">' + $.trim(value) + '</td>';
  42.                         value = arrData[i]['UpdDateTime'].value === "." ? "" : arrData[i]['UpdDateTime'].value;
  43.                         if ($.trim(value) !== "") {
  44.                                 value = value.replace("T", " ");
  45.                                 value = value.replace("Z", "");
  46.                         }
  47.                         row += '<td style="mso-number-format:\'\\@\';">' + $.trim(value) + '</td>';

  48.                         excel += row + "</tr>";
  49.                 }

  50.                 excel += "</table>";

  51.                 var excelFile = "<html xmlns[img]http://bbs.wex5.com/static/image/smiley/default/shocked.gif[/img]='urn:schemas-microsoft-com[img]http://bbs.wex5.com/static/image/smiley/default/shocked.gif[/img]ffice[img]http://bbs.wex5.com/static/image/smiley/default/shocked.gif[/img]ffice' xmlns:x='urn:schemas-microsoft-com[img]http://bbs.wex5.com/static/image/smiley/default/shocked.gif[/img]ffice:excel' xmlns='http://www.w3.org/TR/REC-html40'>";
  52.                 excelFile += '<meta http-equiv="content-type" content="application/vnd.ms-excel; charset=UTF-8">';
  53.                 excelFile += '<meta http-equiv="content-type" content="application/vnd.ms-excel';
  54.                 excelFile += '; charset=UTF-8">';
  55.                 excelFile += "<head>";
  56.                 excelFile += "<!--[if gte mso 9]>";
  57.                 excelFile += "<xml>";
  58.                 excelFile += "<x:ExcelWorkbook>";
  59.                 excelFile += "<x:ExcelWorksheets>";
  60.                 excelFile += "<x:ExcelWorksheet>";
  61.                 excelFile += "<x:Name>";
  62.                 excelFile += "{worksheet}";
  63.                 excelFile += "</x:Name>";
  64.                 excelFile += "<x:WorksheetOptions>";
  65.                 excelFile += "<x[img]http://bbs.wex5.com/static/image/smiley/default/biggrin.gif[/img]isplayGridlines/>";
  66.                 excelFile += "</x:WorksheetOptions>";
  67.                 excelFile += "</x:ExcelWorksheet>";
  68.                 excelFile += "</x:ExcelWorksheets>";
  69.                 excelFile += "</x:ExcelWorkbook>";
  70.                 excelFile += "</xml>";
  71.                 excelFile += "<![endif]-->";
  72.                 excelFile += "</head>";
  73.                 excelFile += "<body>";
  74.                 excelFile += excel;
  75.                 excelFile += "</body>";
  76.                 excelFile += "</html>";

  77.                 var uri = 'data:application/vnd.ms-excel;charset=utf-8,' + encodeURIComponent(excelFile);

  78.                 var link = document.createElement("a");
  79.                 link.href = uri;
  80.                 link.style = "visibility:hidden";
  81.                 link.download = FileName + ".xls";

  82.                 document.body.appendChild(link);
  83.                 link.click();
  84.                 document.body.removeChild(link);
  85.         };
  86.         // 导出报表
  87.         Model.prototype.exportBtnClick = function(event) {
  88.                 this.comp("ExportData").refreshData();
  89.                 var data = this.comp("ExportData").toJson();
  90.                 var dataLabel = "店铺代码,店铺名称,业态,有效,添加时间,添加用户,修改时间,修改用户";
  91.                 this.JSONToExcelConvertor(data.rows, "HRZD-" + sessionStorage.getItem("market") + "-店铺-" + new Date().toLocaleDateString(), dataLabel.split(','));
  92.         };
复制代码
回复 支持 反对

使用道具 举报

65

主题

315

帖子

851

积分

高级会员

Rank: 4

积分
851
 楼主| 发表于 2017-6-20 15:08:35 | 显示全部楼层
ggzhihh 发表于 2017-6-14 14:28
楼主,能给详细讲解下怎么用吗,我基础更差……

上一层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-5-2 13:43 , Processed in 0.098070 second(s), 27 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表