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