[转] Chrome浏览器导出Excel 转自:


data协议方式:对于支持data协议的浏览器,可以将html或是csv先用js base64处理,然后前缀data:application/vnd.ms-excel;base64,,即可使浏览器将其中的数据当做excel来处理,浏览器将提示下载或打开excel文件,可惜的是ie不支持。extjs的官网有一个grid的plugin,实现导出xhtml格式的伪excel文件,就是这么做的。 (except IE)
 具体js如下(template变量的内容因为新浪博客无法正常显示,只能用图片插入):
var tableToExcel = (function() {
 var uri = 'data:application/vnd.ms-excel;base64,', 

 template =​


 base64 = function(s) { return window.btoa((encodeURIComponent(s))) },

 format = function(s, c) { return s.replace(/{(\w+)}/g, function(m, p) { return c[p]; }) }

 return function(table, name) {

   if (!table.nodeType) table = document.getElementByIdx_x_x_x_x_x_x(table)

   var ctx = {worksheet: name || 'Worksheet', table: table.innerHTML}

   window.location.href = uri + base64(format(template, ctx))

 }

})()

其中format函数中m、p代表什么,理解如下:
 format = function(s, c){
 return s.replace(/{(\w+)}/g, function(m, p) {  
        console.log(m + ", " + p);//打印参数。  
        return c[p];  
    })  
​}  
执行:  
console.log(format("a{b}c"
, {b : "BBB"}));  

输出如下: 

{b}, b 

aBBBc <-最终结果。

正则表达式:/{(\w+)}/g,意思要全局匹配带有花括号并且之间至少一个字母的字符串,m是匹配成功的字符串,正则中的括号是得到匹配成功的字符传中分组匹配的结果,比如上面的例子,匹配 “a{b}c”,m 的值为{b},那么分组匹配的结果就是 b,改正则的意图:寻找出字符传s中花括号所包含的的字符对应的C的属性的值,替换掉整个花括号的内容。

' {table}',

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM