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}',