国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > JS > 正文

javascript導出csv文件(excel)的方法示例

2024-05-06 16:54:32
字體:
來源:轉載
供稿:網友

這里貼出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); }}

因此就得出上面最終的代碼。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 瑞安市| 礼泉县| 江达县| 孟村| 中超| 博乐市| 贡嘎县| 土默特左旗| 宁夏| 日喀则市| 祁东县| 碌曲县| 阿瓦提县| 桂阳县| 介休市| 富锦市| 辽阳市| 曲阳县| 申扎县| 噶尔县| 五华县| 延吉市| 平安县| 沈阳市| 灵川县| 肥乡县| 江西省| 岳阳市| 那坡县| 淮南市| 孟津县| 平江县| 宜黄县| 高安市| 江西省| 罗江县| 蛟河市| 天镇县| 筠连县| 陇西县| 留坝县|