js html内容转化为excel文件,网站开发进阶(三十一)js如何将html表格导出为excel文件(后记)...

js如何将html表格导出为excel文件(后记)

前言

项目前期做了个导出Excel表格的功能,但是经过测试发现只有在IE上才可以正确实现,在Chrome等浏览器中无法实现导出效果。经过上网搜索,尝试通过插件的形式实现。通过安装ActiveX for Chrome插件(地址栏输入chrome://extensions/ 进入扩展程序安装页面)。

经过测试,选择ActiveX插件的形式并不能解决问题,故弃掷。经过一番网络搜索,查到一个好的方法,其通过FileSaver.js实现浏览器写入文件到本地磁盘。代码如下:

(function(){

document.getElementById("saveBtn").onclick = function(event){

event.preventDefault();

var BB = self.Blob;

saveAs(

new BB(

["\ufeff" + document.getElementById("content").value] //\ufeff防止utf8 bom防止中文乱码

, {type: "text/plain;charset=utf8"}

)

, document.getElementById("filename").value

);

};

})();

按照前面订单打印的思路,在页面中嵌入一隐藏元素,然后获取其内容。隐藏元素代码如下:

{{querydata}}

获取结果如下:

27987caedde42e644260e9d2e7af2b23.png

接下来需要做的工作解析上面的返回结果,然后拼接成Excel导出方法所需形式。

解析代码如下:

var content = document.getElementById("sunny").innerHTML;

// alert(content);

var contentText = "药品名,药品ID,价格(元),数量(盒),下单时间,订单ID,订单内容,购药者,处方药,药品种类\n";

var obj = JSON.parse(content); // 由JSON字符串转换为JSON对象

// alert(obj.length);

var billDtl = '';

for(k=0; k

var bill = obj[k];

var content = '';

var index = bill.billContent.indexOf(',');

// alert(index);

if(index != -1){

var contentArray = bill.billContent.split(",");

if(contentArray.length > 1){

for(j=0; j

content += contentArray[j] + '、';

}

content += contentArray[j];

}

// alert(content);

}

billDtl += bill.medname + "," + bill.medid + "," + bill.medprice + "," + bill.sellcnt + "," + bill.tx_time + "," + bill.billid + ","

+ content + "," + bill.buy_uid + "," + bill.iscf + "," + bill.medtype + "\n";

}

alert(billDtl);

其中主要涉及到

json数组字符串转换为json数组:

varobj = JSON.parse(content); // 由JSON字符串转换为JSON对象

订单内容格式化:

varcontent = '';

varindex = bill.billContent.indexOf(',');

//alert(index);

if(index != -1){

varcontentArray = bill.billContent.split(",");

if(contentArray.length > 1){

for(j=0; j

content += contentArray[j] + '、';

}

content += contentArray[j];

}

//alert(content);

}else{

content = bill.billContent;

}

订单内容拼接:

billDtl += bill.medname + "," + bill.medid + "," + bill.medprice + "," + bill.sellcnt + "," + bill.tx_time + "," + bill.billid + "," + content + ","

+ bill.buy_uid + "," + bill.iscf + "," + bill.medtype + "\n";

至此,Ecxel可实现导出功能,唯一的缺陷就是不存在文件命名,存储位置选择的对话框。

为了解决文件命名、存储位置选择问题,自己不得不放弃原来的导出方法,尝试使用如下方法:

(function (){

Downloadify.create('downloadify',{

filename: function(){

//return document.getElementById('filename').value;

return "Sunny.csv";

},

data: function(){

var content = document.getElementById("sunny").innerHTML;

// alert(content);

var contentText = "药品名,药品ID,价格(元),数量(盒),下单时间,订单ID,订单内容,购药者,处方药,药品种类\n";

var obj = JSON.parse(content); // 由JSON字符串转换为JSON对象

// alert(obj.length);

var billDtl = '';

for(k=0; k

var bill = obj[k];

var content = '';

var index = bill.billContent.indexOf(',');

// alert(index);

if(index != -1){

var contentArray = bill.billContent.split(",");

if(contentArray.length > 1){

for(j=0; j

content += contentArray[j] + '、';

}

content += contentArray[j];

}

// alert(content);

}else{

content = bill.billContent;

}

billDtl += bill.medname + "," + bill.medid + "," + bill.medprice + "," + bill.sellcnt + "," + bill.tx_time + "," + bill.billid + ","

+ content + "," + bill.buy_uid + "," + bill.iscf + "," + bill.medtype + "\n";

}

alert(billDtl);

return "\ufeff" + contentText + billDtl;

},

onComplete: function(){

alert('保存成功!');

},

onCancel: function(){

},

onError: function(){

alert('保存失败!');

},

transparent: false,

swf: 'img/downloadify.swf',

downloadImage: 'img/download.png',

width: 100,

height: 30,

transparent: true,

append: false

});

})();

经过UI的稍微调整,问题总算得以解决。

参考文献

有图有真相

c57289be9f4944f6f8676796306e04a2.png

ab9217496d2ebccbfbb72183ebeaaad3.png

0d2e3fc42728f67a02503473466a67c2.png

美文美图

6faf9d9c87b1f9b49432ff4cd954e42f.png

文章来源: shq5785.blog.csdn.net,作者:No Silver Bullet,版权归原作者所有,如需转载,请联系作者。

原文链接:shq5785.blog.csdn.net/article/details/50774291

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值