您好,登錄后才能下訂單哦!
這篇文章給大家介紹怎么在javascript中導出csv文件,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
/** * 導出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); } }
關于怎么在javascript中導出csv文件就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。