这里贴出JavaScript导出csv文件(excel)的代码。
/** * 导出excel * @param {Object} title 标题列key-val * @param {Object} data 值列key-val * @param {Object} fileName 文件名称 */ function JSONToExcelConvertor(title, data, fileName) { var CSV = ''; var row = ""; for (var i = 0; i < title.length; i++) { if(title[i].title){ row += title[i].title + ','; } } row = row.slice(0, -1); CSV += row + '\r\n'; for (var i = 0; i < data.length; i++) { var row = ""; for (var j = 0; j < title.length; j++) { if(title[j].title){ row += '"' + (data[i][title[j].field] ? data[i][title[j].field] : "") + '"\t,'; } } row.slice(0, row.length - 1); CSV += row + '\r\n'; } if (CSV == '') { alert("Invalid data"); return; } var fileName = fileName; var uri = 'data:text/csv;charset=utf-8,\ufeff' + encodeURI(CSV); var link = document.createElement("a"); link.href = uri; link.style = "visibility:hidden"; link.download = fileName + ".csv"; document.body.appendChild(link); link.click(); document.body.removeChild(link); }
上面的写法,如果excel中的数据太多,就会导致无法导出的结果,原因是浏览器对URL的长度有限制,因此要使用Blob对象和window.URL.createObjectURL()方法做一下改造。
window.URL.createObjectURL()方法可以直接生成blob:开头的链接,该链接产生于浏览器端,不会占用服务器资源。
/** * 导出excel * @param {Object} title 标题列key-val * @param {Object} data 值列key-val * @param {Object} fileName 文件名称 */ function JSONToExcelConvertor(title, data, fileName) { var CSV = ''; var row = ""; for (var i = 0; i < title.length; i++) { if(title[i].title){ row += title[i].title + ','; } } row = row.slice(0, -1); CSV += row + '\r\n'; for (var i = 0; i < data.length; i++) { var row = ""; for (var j = 0; j < title.length; j++) { if(title[j].title){ row += '"' + (data[i][title[j].field] ? data[i][title[j].field] : "") + '"\t,'; } } row.slice(0, row.length - 1); CSV += row + '\r\n'; } if (CSV == '') { alert("Invalid data"); return; } var fileName = fileName; var uri = new Blob(['\ufeff' + CSV], {type:"text/csv"}); var link = document.createElement("a"); link.href = URL.createObjectURL(uri); link.style = "visibility:hidden"; link.download = fileName + ".csv"; document.body.appendChild(link); link.click(); document.body.removeChild(link); }
然而,虽然window.URL.createObjectURL()方法在IE10、 IE11以及Microsoft Edge中能生成的blob:链接,但是却不能把它加到一个<a>节点上,也不能直接在浏览器地址栏打开访问,否则会得到【SCRIPT5:拒绝访问。】错误。甚至,IE9根本不支持调用window.URL.createObjectURL()方法创建Blob URLs。
Microsoft Internet Explorer / Microsoft Edge和高大上的Google Chrome / Mozilla Firefox对于window.URL.createObjectURL()方法创建Blob链接最直观的区别在于得到的blob:链接形式不一样,分别在微软浏览器和标准浏览器中运行new Blob()代码,会得到两种Blob链接形式,第一种为chrome和firefox生成的带有当前域名的标准blob:链接形式,第二种为Microsoft IE和Microsoft Edge生成的不带域名的blob:链接。那么我们就可以通过window.URL.createObjectURL(new Blob()) . indexOf(location.host) < 0表达式来检测是否是IE或早期生成Object URL不带域名的Edge,如果表达式返回true则是IE或Edge旧版本。
事实上,Blob URL不被支持是出于IE浏览器对安全性的考虑(IE浏览器真安全啊,牛逼),然后它自己提供了一套API用来创建或下载Blob文件:msSaveOrOpenBlob。
/** * 导出excel * @param {Object} title 标题列key-val * @param {Object} data 值列key-val * @param {Object} fileName 文件名称 */ function JSONToExcelConvertor(title, data, fileName) { var CSV = ''; var row = ""; for (var i = 0; i < title.length; i++) { if(title[i].title){ row += title[i].title + ','; } } row = row.slice(0, -1); CSV += row + '\r\n'; for (var i = 0; i < data.length; i++) { var row = ""; for (var j = 0; j < title.length; j++) { if(title[j].title){ row += '"' + (data[i][title[j].field] ? data[i][title[j].field] : "") + '"\t,'; } } row.slice(0, row.length - 1); CSV += row + '\r\n'; } if (CSV == '') { alert("Invalid data"); return; } var fileName = fileName; var uri = new Blob(['\ufeff' + CSV], {type:"text/csv"}); if (window.navigator && window.navigator.msSaveOrOpenBlob) { // for IE window.navigator.msSaveOrOpenBlob(CSV, fileName + ".csv"); } else { // for Non-IE(chrome、firefox etc.) var link = document.createElement("a"); link.href = URL.createObjectURL(uri); link.style = "visibility:hidden"; link.download = fileName + ".csv"; document.body.appendChild(link); link.click(); document.body.removeChild(link); } }
因此就得出上面最终的代码。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对小牛知识库的支持。
本文向大家介绍thinkPHP导出csv文件及用表格输出excel的方法,包括了thinkPHP导出csv文件及用表格输出excel的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了thinkPHP导出csv文件及用表格输出excel的方法。分享给大家供大家参考,具体如下: 1.thinkphp导出csv文件 导出csv文件可能就那几行代码,今天有个问题困扰我好久,就是导出之后出现一些
本文向大家介绍Python导出数据到Excel可读取的CSV文件的方法,包括了Python导出数据到Excel可读取的CSV文件的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python导出数据到Excel可读取的CSV文件的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的Python程序设计有所帮助。
本文向大家介绍C#导出数据到Excel文件的方法,包括了C#导出数据到Excel文件的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#导出数据到Excel文件的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的C#程序设计有所帮助。
本文向大家介绍python使用pandas处理excel文件转为csv文件的方法示例,包括了python使用pandas处理excel文件转为csv文件的方法示例的使用技巧和注意事项,需要的朋友参考一下 由于客户提供的是excel文件,在使用时期望使用csv文件格式,且对某些字段内容需要做一些处理,如从某个字段中固定的几位抽取出来,独立作为一个字段等,下面记录下使用acaconda处理的过程; (
本文向大家介绍asp导出excel文件最简单方便的方法,包括了asp导出excel文件最简单方便的方法的使用技巧和注意事项,需要的朋友参考一下 由于excel软件能识别table格式的数据,所以asp只需要输出table格式的html代码,同时设置好contenttype,增加保存为附件的响应头即可将输出的html代码保存为xls文件。 asp导出excel文件源代码如下:
本文向大家介绍C#导出Excel的方法,包括了C#导出Excel的方法的使用技巧和注意事项,需要的朋友参考一下 这段时间需要用C#做个页面,把网格中查询出来的数据导出到Excel中。在网上找了一大堆C#导出Excel的代码,试来试去都不可用。好多代码是针对.net 2.0或者3.0的,无奈我的程序用的是.net 1.0开发的,造成好多函数都不能用。之后就转变思想,寻找“UltraWebGrid导出